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

San*_*der 16 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>
Run Code Online (Sandbox Code Playgroud)

在Rails应用程序中,我需要在asp.net MVC3中以不同的方式执行,很可能我只打印出我的json字符串而没有<%=%>这不是razor视图引擎样式)

但我的问题是,

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

还有另外一个问题,假设我的骨干应用程序http://example.com/#documents中有一条路线

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

Der*_*ley 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, _);
Run Code Online (Sandbox Code Playgroud)

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

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

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