骨干嵌套视图&嵌套模型

时间:2015-05-12 05:14:02

标签: backbone.js collections views models

我是骨干的新手,并试图开始在我们的项目中使用。

我的要求是我有类似的东西

var TextFields = Backbone.Model.extend({});

var TextFieldsCollection = Backbone.Collection.extend({});

var Module = Backbone.Model.extend({

    defaults: {
        fields: new TextFieldsCollection()
});

var ModuleCollection = Backbone.Collection.extend({

    model: CTModule
});

现在我为TextFields&模块。 如果我在TextFields中更改了一个值,则会为模型触发一个事件,而我正在更改模型中的值但是集合没有得到更新。 我试图在子模型中触发骨干事件,但在集合视图中,我无法映射到触发更改事件的正确模型。

任何评论都有帮助。我无法使用更多的库。这可以在Backbone中完成吗?

1 个答案:

答案 0 :(得分:0)

我不知道什么是完整代码,但如果你以一种通常编写Backbone应用程序的方式来实现,那么一切都应该有效。

快速教程:

var TestModel = Backbone.Model.extend({});
var TestModelCollection = Backbone.Collection.extend({ model: TestModel });

// now if you have a view for collection
var TestModelCollectionView = Backbone.View.extend({
  initialize: function(opts) {
    this.collection = opts.collection;
    this.collection.on('change', this.render, this) // so - rerender the whole view 
  }
});

//execution:    
var modelData = { foo: 'bar' };
var collection = new TestModelCollection([modelData]);

var view = new TestModelCollectionView({collection: collection});
view.render();

collection.first().set('your_attr', 'new_value'); // will cause rerender of view

//////

还有一件事 - 如果你有一个由模型保存的集合(在你的情况下是模块模型,它有集合作为其属性之一),并且你的视图保留了该模型,你将不得不直接从通过模型(this.model.get('fields').on( .... ))查看集合,或在模型中重新抛出集合事件

我希望我至少帮了一点。

//////

我的代码中可能存在一些语法错误 - 没有在js小提琴上运行它。