【发布时间】:2013-07-15 07:24:25
【问题描述】:
我是从 Backbone.js 开始的,所以我必须说我对这些概念还不是很熟悉。
我已经预定义了 HTML,我想使用 Backbone 来管理它。这很重要,我想保持这种状态。
说这是我的 HTML 的(部分):
<div class="pig" data-id="1">
<h1>Harry</h1>
<input type="text" value="Harry">
</div>
<div class="pig" data-id="2">
<h1>Jill</h1>
<input type="text" value="Jill">
</div>
<div class="pig" data-id="3">
<h1>Bob</h1>
<input type="text" value="Bob">
</div>
现在的想法是,当您更改输入时,这应该会更新我的主干模型并渲染视图,从而使用新名称更新 h1。我不确定应该如何设置模型和视图。
我的模型和视图的结构有点像,但我不知道应该如何使用它们。
目前我有这样的事情:
var PigModel = Backbone.Model.extend()
var pigs = new PigModel()
pigs.reset([
{"id": "1", "name": "Harry"},
{"id": "2", "name": "Jill"},
{"id": "3", "name": "Bob"}
])
var PigView = Backbone.View.extend({
el: '.pig',
events: {
'change input': function() {
// update appropriate Model ?
this.render()
}
},
render: function() {
var new_name = // get new name from model ?
var pig_template = _.template($('#pig_template').html())
var new_contents = pig_template({ name: new_name })
// render only the pig that was changed ?
}
})
所以在我在代码中添加 cmets 的地方我不知道该怎么做:
- 在
change事件中,如何找到属于该视图的模型?我可以遍历所有模型,但这似乎效率低下。 - 再次在render方法中,如何获取属于该视图的模型?
- 在render方法中,如何只渲染事件所在的猪视图,而不渲染所有的猪?
也许我在这里采取了完全错误的方法。如果是这样,请指出正确的方向。
【问题讨论】:
-
Backbone 不能这样工作。您可以使用视图的
initialize函数中的大量代码来破解它,但实际上您需要在视图中呈现 HTML,而不是使用预呈现的 HTML。 Backbone 的全部意义在于分离模型的显示和模型本身 -
@Bojangles 我实际上找到了一种非常干净的方法来做到这一点。看我的回答。
标签: javascript html backbone.js