Backbone.js Can';不要让骨干事件发生;将模型渲染到多个位置
我似乎无法让事件发生 以下是多视图和单视图: 单一:Backbone.js Can';不要让骨干事件发生;将模型渲染到多个位置,backbone.js,Backbone.js,我似乎无法让事件发生 以下是多视图和单视图: 单一: PartyView = Backbone.View.extend({ tagName: 'span', className: 'aParty', senderTemplate: _.template($('#senderTemplate').html()), recipientTemplate: _.template($('#recipientTemplate').html()), render: function () { if (thi
PartyView = Backbone.View.extend({
tagName: 'span',
className: 'aParty',
senderTemplate: _.template($('#senderTemplate').html()),
recipientTemplate: _.template($('#recipientTemplate').html()),
render: function () {
if (this.model.get("isSender")=="1")
$("#senders").append(this.senderTemplate(this.model.toJSON()))
else
$("#recipients").append(this.recipientTemplate(this.model.toJSON()))
},
events: {
"click .delete":"deleteParty",
'click #recipients': "sayhi"
},
sayhi : function () { console.log ("hi"); },
deleteParty:function () {
this.model.destroy();
this.remove();
}
})
多个:
PartiesView = Backbone.View.extend({
className: "partiesView",
senderTemplate: _.template($('#senderTemplate').html()),
recipientTemplate: _.template($('#recipientTemplate').html()),
render: function(eventName) {
$("#senders").empty();
$("#recipients").empty();
_.each(this.model.models, function(party){
var partyview = new PartyView ({ model: party })
partyview.render();
}, this);
return this;
},
events : {
'click #recipients': "sayhi"
},
sayhi : function () { console.log ("hi"); }
});
我没有控制台错误,一切都很好。我只是不能让sayhi或删除事件触发。我怀疑它与和有着最密切的关系,但实际上,我已经花了好几个小时试图弄清楚这一点。任何指导都将不胜感激
编辑1:
以下是模板:
<script type='text/template' id='senderTemplate'>
<span class='greenbubble'><%= email%> <button class='delete'>x</button></span>
</script>
<script type='text/template' id='recipientTemplate'>
<span class='lightbluebubble'><%= email%> <button class='delete'>x</button></span>
</script>
编辑3:
一把小提琴的最终工作版本
我对
#收件人的参考资料表示怀疑。视图的events
属性仅委托给视图的el
中的项目,我在任何视图中都看不到#收件人。如果#recipients
在这两个视图之外,则不会触发
根据评论进行编辑
你不应该做这种事:
$("#senders").append(this.senderTemplate(this.model.toJSON()))
因为您可能正在修改视图的$el
之外的元素。相反,请执行以下操作:
this.$("#senders").append(this.senderTemplate(this.model.toJSON()))
您希望绑定到的所有元素都应包含在视图的$el
中。如果没有,它们就无法正确绑定。这可能是所有绑定的根本原因,而不仅仅是#recipients
我怀疑#recipients
引用。视图的events
属性仅委托给视图的el
中的项目,我在任何视图中都看不到#收件人。如果#recipients
在这两个视图之外,则不会触发
根据评论进行编辑
你不应该做这种事:
$("#senders").append(this.senderTemplate(this.model.toJSON()))
因为您可能正在修改视图的$el
之外的元素。相反,请执行以下操作:
this.$("#senders").append(this.senderTemplate(this.model.toJSON()))
您希望绑定到的所有元素都应包含在视图的$el
中。如果没有,它们就无法正确绑定。这可能是所有绑定的根本原因,而不仅仅是#接收者
表面上的删除
连接看起来正常;你能帮我们摆弄一把小提琴吗?在表面上,delete
接线看起来不错;你能帮我们摆好小提琴做实验吗?我也会怀疑发送者。除了它自己的el
之外,视图几乎不应该与DOM的任何部分发生冲突,并且视图应该几乎总是创建并完全控制它自己的el
。啊,我明白了。那么,如果模型在集合视图中,是否可以将其渲染到不同的点?i、 e.让partiesView
作为收藏的el
,让模型呈现给#发送者
或#接收者
,这取决于它是哪种模型?是的,通常情况下,您会有一个以#partiesView
作为其el
的视图,然后您可以在该视图中侦听事件,如“单击发件人。删除”
,然后执行修改HTML之类的操作。如果您的视图是完全独立的,并且它们使用this.$()
而不是$()
来操作它们的内部结构,那么您会过得更好。更新了此答案以纳入这些见解。你们都说得很对。克里斯和穆,谢谢你们的意见!!克里斯,我不必非得这么说。$(“#发件人”)
,但你的方向肯定是对的。我需要模型视图将其渲染为el
,并将其提供给集合视图以附加到正确的位置。我制作了一把小提琴,上面有完整的版本。请参阅相关链接。我也会怀疑#发件人。除了它自己的el
之外,视图几乎不应该与DOM的任何部分发生冲突,并且视图应该几乎总是创建并完全控制它自己的el
。啊,我明白了。那么,如果模型在集合视图中,是否可以将其渲染到不同的点?i、 e.让partiesView
作为收藏的el
,让模型呈现给#发送者
或#接收者
,这取决于它是哪种模型?是的,通常情况下,您会有一个以#partiesView
作为其el
的视图,然后您可以在该视图中侦听事件,如“单击发件人。删除”
,然后执行修改HTML之类的操作。如果您的视图是完全独立的,并且它们使用this.$()
而不是$()
来操作它们的内部结构,那么您会过得更好。更新了此答案以纳入这些见解。你们都说得很对。克里斯和穆,谢谢你们的意见!!克里斯,我不必非得这么说。$(“#发件人”)
,但你的方向肯定是对的。我需要模型视图将其渲染为el
,并将其提供给集合视图以附加到正确的位置。我制作了一把小提琴,上面有完整的版本。请参阅相关链接。