BackboneJs:我如何在页面标记中引导我的数据,何时将它们分配给我的集合

时间:2011-10-25 20:58:12

标签: javascript asp.net-mvc backbone.js

所以, 构建一个使用多个(现在为2个)全局集合的应用程序, 它是文件和患者的目录,它们有关系,但不是1个文件或属于1个病人的文件清单,因此它们实际上是2个独立的收藏品,

我的应用程序是在模块系统中构建的,与此处描述的方式非常类似: http://weblog.bocoup.com/organizing-your-backbone-js-application-with-modules

backbone.js文档说的是关于bootstrapping,做这样的事情,

<script>
  Accounts.reset(<%= @accounts.to_json %>);
</script>

这是在Rails应用程序中,但我需要在asp.net MVC3中以不同的方式执行,很可能我只打印出我的json字符串而没有&lt;%=%&gt;这不是剃刀视图引擎风格)

但我的问题是,

这个Accounts.reset(...data...);只是漂浮在我的标记中,它在我的模块系统中没有任何好的结构,是不是有办法很好地做到这一点? 我可以从模块中获取数据吗?

和另一个问题,假设我的骨干应用程序http://example.com/#documents

中有一条路线

并且有人直接调用此链接,我的应用程序是否准备好数据(来自引导程序),在路由本身执行之前?

2 个答案:

答案 0 :(得分:10)

我倾向于设置application个对象 - 一个封装启动应用程序所需的所有代码的对象。然后我将参数带入该对象的构造函数中,以便app对象可以使用它们。将预先加载的JSON数据传递到app对象是我要做的事情之一,以保持代码的健全和封装。

通常是这样的事情:

MyApp = (function(Backbone, _){
  var MyModel = Backbone.Model.extend({});

  var MyCollection = Backbone.Collection.extend({
    model: MyModel
  });

  var MyView = Backbone.View.extend({
    initialize: function(){
      this.collection.bind("reset", this.render, this);
    },

    render: function(){
      // do stuff with the collection here
    }
  });

  var myApp = function(initialModels){
    this.start = function(){
      this.models = new MyCollection();
      this.myView = new MyView({collection: this.models});
      this.models.reset(initialModels);  
    };
  };

  return myApp;
})(Backbone, _);

然后在我需要启动应用的页面中,我这样做:

<script language="javascript">
  var myApp = new MyApp(<%= mymodels.to_json %>);
  myApp.start();
</script>

那当然是rails版本。只需将<%= ... %>替换为ASP.NET MVC中Razor语法的版本。

答案 1 :(得分:0)

如果在Rails上:除了Dericks的回答,您可能希望使用Gon“在您的js中获取您的Rails变量”。

然后你会像这样初始化你的应用程序:

<script language="javascript">
  var myApp = new MyApp(gon.mymodels);
  myApp.start();
</script>