spine.js在启动时填充模型实例

时间:2012-09-12 15:06:46

标签: javascript spine.js

绝对的初学者在这里。我想在页面加载后立即将数据加载到模型中。 在执行任何其他操作之前。目前我有这段代码。

// Model code
var Portfolio = Spine.Model.sub({});
Portfolio.configure("Portfolio")

Portfolio.extend({
  populate: function(values){
    for(var i in values[0]){
     // add attributes to Model
      this.attributes.push(i);
    }
    for(var j = 0; j < values.length; j++ ){
      var tmpInst =  this.create(values[j]);
      tmpInst.save();
    }
  }
});

// app controller code
$(function(){
   var App =Spine.Controller.sub({
    init: function(){
      jQuery.getJSON("../xml/data.json", 
        function(result){ 
             Portfolio.populate(result['content']);
        }
      ).complete(function(result) { 
          // do other stuff
      });
    }
  })
    var app = new App();
});

因此,当页面加载完成后,将调用控制器init函数,该函数将检索json数据并将其传递给模型,模型将对其进行解析并创建单个实例。

我这样做错了吗?我在文档中看到了Fetch函数,但没有示例如何工作。

1 个答案:

答案 0 :(得分:0)

您可能希望使用Spine的框架来执行此操作:

  1. 不要触发自己的jQuery.getJSON(),而是在模型中包含Spine.Ajax。
    Portfolio.extend(Spine.Model.Ajax);
  2. 将Spine.Model.host设置为您的服务器
  3. 将url属性/方法添加到您的Portfolio对象中,类似于'xml / data.json'
  4. 调用Portfolio.fetch()
  5. 覆盖Portfolio.fetch()函数,只提取数组数据的节点或您想到的任何初始化,就像配置一样。如果我没有弄错的话,fetch()将加载对象并设置JSON中提供的所有属性,即使它们未在Model @configure call中配置