我从 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 ?
}
})
所以在我在代码中添加注释的地方我不知道该怎么做:
- 在
change
活动中,如何找到属于该视图的模型?我可以遍历所有模型,但这似乎效率低下。 - 再次在 render 方法中,如何获取属于该视图的模型?
- 在 render 方法中,如何只渲染事件所在的猪视图,而不渲染所有的猪?
也许我会在这里采取完全错误的方法。如果是这样,请指出我正确的方向。