所以, 构建一个使用多个(现在为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
中有一条路线并且有人直接调用此链接,我的应用程序是否准备好数据(来自引导程序),在路由本身执行之前?
答案 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>