- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
listento
仅针对全局集合触发,而不是我在创建时传递给 View 的集合。
例如:
var MyView = Backbone.View.extend({
initialize: function() {
this.listenTo(notes, "add", this.test); // <--- THIS FIRES
this.listenTo(this.collection, "add", this.test); // <-- THIS DOES NOT FIRE
},
test: function() {
console.log('model added to collection')
}
});
我在创建 View 时像这样传递过滤后的集合:
var notesFilteredByGroup = notes.filter_group(123);
var myView = new MyView({
collection: notesFilteredByGroup
});
这是 Notes
集合:
Notes = Backbone.Collection.extend({
url: '/notes',
model: Note,
filter_group: function(groupNum) {
filtered = this.filter(function(note) {
return note.get('groupNum') === groupNum;
});
return new Notes(filtered);
}
});
当我提交新笔记时,它会很好地更新全局集合。如何让 notesFilteredById
或 this.collection
监听添加的模型?
编辑:
添加了请求的代码,更改了一些变量名以使问题更清楚
注意提交代码:
var AddNoteView = Backbone.View.extend({
tagName: 'div',
template: _.template( AddNoteTemplate ),
events: {
'click #noteSubmitButton': 'submit'
},
initialize: function() {
this.render();
},
render: function() {
var template = this.template( this.model.toJSON() );
this.$el.html(template);
return this;
},
submit: function(event) {
event.preventDefault();
var newNote = {
text: $('#text').val(),
groupNum: $('#groupNum').val(),
};
this.collection.create(newNote, {wait: true});
}
});
实例化 AddNoteView:
var notes = new Notes;
notes.fetch();
var addNoteView = new AddNoteView({
collection: notes
});
最佳答案
我想你的 notes
全局集合在初始化时看起来像这样
var notes = new Notes();
所以这被传递给不同的 View 。
但是当你在过滤集合的时候
var notesFilteredById = notes.filter_id(123);
...
return new Notes(filtered);
您返回的是新笔记合集..
这会创建一个新实例,它与全局 notes 没有相同的绑定(bind)。
因此,要使其正常工作,您还必须明确地将创建的模型添加到过滤后的集合中。
像这样
// You need to pass that into the view
var addNoteView = new AddNoteView({
collection: notes,
filteredCollection : notesFilteredByGroup
});
在 View 中,您需要将其显式添加到其他集合
var AddNoteView = Backbone.View.extend({
tagName: 'div',
template: _.template( AddNoteTemplate ),
events: {
'click #noteSubmitButton': 'submit'
},
initialize: function() {
this.listenTo(this.collection, 'add', addToCollection);
this.render();
},
render: function() {
var template = this.template( this.model.toJSON() );
this.$el.html(template);
return this;
},
addToCollection : function(model) {
// Need to add to the other collection.
this.options.filteredCollection.add(model);
},
submit: function(event) {
event.preventDefault();
var newNote = {
text: $('#text').val(),
groupNum: $('#groupNum').val(),
};
this.collection.create(newNote, {wait: true});
}
});
关于Backbone.js `listento` 未触发过滤集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18036600/
在 Backbone 对象(模型、 View 、路由器)中,我们可以调用 this.listenTo 像这样 var BodyView = Backbone.View.extend({ initi
下面是我的 View 初始化函数,它在初始化时应该接收模块名称,以便从集合中获取正确的数据。 问题是: Listento 在获取集合后没有重定向到 render() 方法,它还在控制台上给我一个错误
我有以下工作代码,我计划用 object.listenTo 调用替换 object.on 调用: setField: function(field) { if (this.field) this.
listento 仅针对全局集合触发,而不是我在创建时传递给 View 的集合。 例如: var MyView = Backbone.View.extend({ initialize: funct
我是 Backbone 的新手,我有一些代码应该监听属性更改并触发函数。我在网上看到的关于如何使用 listenTo 的所有内容似乎都涵盖了这种情况,所以我不知道我忽略了什么。 为了更好地理解我做了一
我正在尝试收听模型的特定属性(transitions,数字计数)。在 View 中,我有 this.listenTo(this.model, 'change', _.bind(this.transit
我是 Backbone 新手,正在尝试运行以下代码。但我不明白。它无法正常工作。更清楚的是,当我创建集合时,listenTo 不会捕获创建事件。 这是我的代码 var levelIndex=0; va
我是 Backbone 的新手,对事件散列 (events {}) 和您放入初始化方法中的 listenTo 之间的区别感到困惑。你为什么要用一个而不是另一个。事件哈希不是在初始化时设置的吗? 最佳答
我是 Backbone 的新手,我对示例待办事项应用代码的片段感到困惑:http://backbonejs.org/docs/todos.html 在 AppView 对象上有一个名为 addOne
我有一个 型号 其中在 初始化 功能我有以下代码: this.listenTo(this, 'change:re change:read', this.patch); 补丁函数看起来像这样: patc
我正在尝试在我的模型中对自身进行 listenTo 绑定(bind),但无法使其正常工作。我不确定我做错了什么: initialize: function() { this.listenTo(th
我已经开始使用 Backbone。 在学习 Backbone 时,我了解到使用 .listenTo 而不是 .on 的优势在于 listenTo 允许“对象跟踪事件”。 我不明白这句话想表达什么。好吧
我现在坚持了。我收到以下错误: TypeError: listenTo is undefined return listenTo.call(this, evtSource, events, _.
我正在开发一个 Backbone 项目,在 View 的初始化函数内部,我试图在集合上设置一个监听器,如下所示: this.listenTo(this.collection, "change:attr
在 Backbone 中,我正在使用新的 Backbone.listenTo 事件。我的一个实例将监听器附加到三个不同的事件,例如: this.listenTo(this._Collection, '
下面两行代码的优点和缺点是什么?我不明白为什么有两种不同的方法来做同样的事情。 this.listenTo(app.Todos, 'change:completed', this.filterOne)
我正在尝试通过 stub Backbone.View 的 listenTo 回调方法来实现一个简单的测试。 但是,我似乎不能直接这样做——我必须将回调包装在一个匿名函数中。知道为什么会发生这种情况吗?
我的 Backbone 事件系统有问题。 是否可以直接传递jquery函数作为回调? 以下代码不会触发显示/隐藏方法: initialize: function () { this.render(
是否可以为 listenTo 回调绑定(bind)函数参数? 到目前为止,我已经添加了一个包装器方法“myHandler”,我想摆脱它: // Basic marionette layout var
我正在使用第三方延迟加载插件:http://www.appelsiini.net/projects/lazyload 在其源代码中,它具有以下内容: if (0 === settings.event.
我是一名优秀的程序员,十分优秀!