我是骨干的新手,并试图开始在我们的项目中使用。
我的要求是我有类似的东西
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中完成吗?
答案 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小提琴上运行它。