Привязать коллекцию к модели в Backbone

У меня есть класс на стороне сервера: TopicsListModel со следующими свойствами:

public class TopicsListModel
{
    public TopicsListModel()
    {
        ChildTopics = new HashSet<TopicsListModel>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<TopicsListModel> ChildTopics { get; set; }
}

Есть функция, которая возвращает список,

public JsonResult SearchTopic(String topic)
    {
        var topics = LandingManager.SearchTopics(topic);
        //return Json(topics);
        return new JsonResult { Data = topic, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
    }

Мне нужно добавить это в модель и коллекцию Backbone. Я новичок в Backbone, и, как вы можете догадаться, я борюсь. Любая помощь будет принята с благодарностью.

Я хочу построить модель, которая будет хранить такие данные, как:

{    name: "Model1",    id: 1,    submodels: [{ name: "Submodel1", id: 2 }, { name: "Submodel1", id: 2 }] } 

Я не могу этого сделать, у меня возникли проблемы с настройкой такой базовой коллекции, части кода ASP.NET MVC, которая возвращает данные, которыми я поделился. Делюсь всем, что я сделал в Backbone:

TestBB = function () {
if (!window.console) window.console = { log: function () { } };

var treeModel = Backbone.Model.extend({});
var treeSubModel = Backbone.Model.extend({});
var treeCollection = Backbone.Collection.extend({
    model: treeSubModel,
    initialize: function () {
        console.log('Collection Initialized');
    }
});
var treeView = Backbone.View.extend({
    el: $('#tree-view'),
    initialize: function () {
        //            this.collection.bind("render", this.render, this);
        //            this.collection.bind("addAll", this.addAll, this);
        //            this.collection.bind("addOne", this.addOne, this);
        _.bindAll(this);
    },
    render: function () {
        console.log("render");
        console.log(this.collection.length);
        $(this.el).html(this.template());
        this.addAll();
        var template = _.template($("#template").html(), {});
        this.el.html(template);
    },
    addAll: function () {
        console.log("addAll");
        this.collection.each(this.addOne);
    },
    addOne: function (model) {
        console.log("addOne");
        view = new treeView({ model: model });
        $("ul", this.el).append(view.render());
    },
    events: { "click #btnFind": "doFind" },
    doFind: function (event) { alert('event fired'); }
});

return {
    TreeView: treeView
};} (Backbone);

Пожалуйста, предложите.


person Joy    schedule 20.07.2012    source источник
comment
Я думаю, возможно, вы могли бы попытаться сделать свой вопрос немного более конкретным. Вы не даете понять, возникают ли у вас проблемы с основами выборки коллекций или вложенных коллекций, или конкретно с выборкой из ASP.NET. Вы также можете показать нам, что уже пробовали, чтобы посмотреть, сможем ли мы отладить реальный код.   -  person stusmith    schedule 23.07.2012
comment
@stussmith: извините за обязательную часть, я ошибся :)   -  person Joy    schedule 24.07.2012


Ответы (2)


Это не случай «привязки» коллекции к серверной части как таковой: вы fetch получаете коллекцию с сервера для чтения и save (через синхронизацию) для записи.

Во-первых, вам нужно сообщить коллекции, где находятся данные, установив свойство url. См.: http://backbonejs.org/#Collection-url.

Во-вторых, вам нужно получить данные, используя метод fetch. См. http://backbonejs.org/#Collection-fetch. Обратите внимание, что это асинхронно, поэтому вам нужно дождаться обратного вызова success.

Для сохранения данных используйте метод save на отдельных моделях. См. http://backbonejs.org/#Model-save.

person stusmith    schedule 20.07.2012
comment
Не очень поучительно (очень общий, учитывая вышеприведенный случай и новичок!), возможно, вы можете уточнить упомянутый контекст, то есть настроить модель и коллекцию. - person Joy; 20.07.2012

Решено Я понял подход, определил модель и заполнил ее!

person Joy    schedule 02.08.2012