我正在学习Backbone.js。我喜欢我所看到的但是我不清楚...处理页面上已有数据的最佳方法是什么。最好是通过所有这些并为每个人创建一个模型。
$('element').each(function() {
var model = new Model();
collection.add(model);
});
或者我应该加载页面,然后获取数据并从那里处理它。
或者,有没有更好的方法来做到这一点,我错过了什么?
修改
如果服务器端I循环我的数据以使用页面
引导它服务器端
<div>
<p>{{ model.someInformation }}</p>
</div>
我应该直接实例化新模型吗?
<script>
Backbone.Model.extend({
var model = new Model();
});
</script>
我在bootstrap http://backbonejs.org/#FAQ-bootstrap读到了关于Collection reset的内容,但似乎有些东西我没有得到......我认为我需要模型添加到集合中,如果我没有在某处实例化我的模型对reset
集合有什么用处...我在这里有点迷失。
修改2
我已经能够让我的应用程序正常运行:
$('#active-cards .card').each(function(i) {
window['card' + i] = new Card(),
window['cardView' + i] = new CardView({ el: $(this) });
id = $(this).attr('id'),
name = $(this).find('input[name="name"]').val(),
client = $(this).find('input[name="client"]').val(),
field = $(this).find('input[name="field"]').val();
window['card' + i].set({ id: id, name: name, client: client, field: field });
cards.add(window['card' + i]);
});
在此之后,我可以通过
找到模型var id = this.$el.attr('id');
var card = cards.get(id);
答案 0 :(得分:1)
不,你通常不会这样做。看起来您正在寻找在页面加载时填充集合。主干文档有一个section on this,它被称为bootstrapping。
编辑以回答评论
了解一下这可能是一个奇怪的概念,但在添加到集合之前,您不需要实例化模型。根据重置文档:
使用reset将集合替换为新的模型列表(或 属性哈希)
因此,使用Collections,您可以指定model
property,然后只需添加一个对象文字数组。例如:
UserCollection = Backbone.Collection.extend({
model: User
});
myUserCollection = new UserCollection();
myUserCollection.reset([
{
name: "Bob",
age: 25
}, {
name: "Foo",
age: 26
}
]);
myUserCollection
现在将包含2个User
模型。
第二次修改
我仍然认为你没有得到这个概念。以下是我认为你想要实现的目标:http://jsfiddle.net/67E6t/
答案 1 :(得分:0)
因此,如果您想将初始模型引导到集合中,您希望直接将初始模型从服务器端放入集合中。
<script>
var myCol = new Backbone.Collection;
accounts.reset(models_prepared_in_server>); //you utilize your server side to replace the models_prepared_in_server with your actual data.
</script>
因此,当页面转移到客户端时,您的代码看起来像(作为示例):
<script>
var myCol = new Backbone.Collection;
myCol.reset([
{ name: model1,
some_prop: prop_value;
},
{ name: model2,
some_prop: prop_value2;
}
]);
</script>
因此,在您的浏览器执行脚本后,myCol
会充满您的模型。