在Backbone.js中处理现有数据的最佳方法是什么

时间:2013-03-23 14:15:55

标签: javascript backbone.js

我正在学习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);

2 个答案:

答案 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会充满您的模型。