我在一个示例中看到,您可以对从控制器返回的集合进行编码,并将其作为Json对象的常规数组用于脚本文件中。
查看/共享/ Index.cshtml
<script>
var photos = @Html.Raw(Json.Encode(Model))
</script>
这是在控制器返回数据的cshtml视图中完成的。但是,似乎“照片”在其他脚本文件中可见,并且可用于使用该数据填充主干模型。 我对它是如何工作感兴趣,究竟是什么在幕后发生。当我们对从控制器返回的Json格式模型进行编码时,该变量是否被缓存并存在于应用程序的生命周期中,并且在某种程度上是包含该数据的全局变量?感谢
Scripts / app.js文件中的代码:
var Photo = Backbone.Model.extend({ });
var firstPhoto= new Photo(photos[0]); // first photo model of the encoded collection
我可以这样做吗?在我的剃刀视图中将模型序列化为Json,并在我的应用程序中使用不同.js文件中的模型?
答案 0 :(得分:0)
我可以这样做吗?就像在我的剃刀视图中将模型序列化为Json一样 在我的应用程序中使用不同.js文件中的模型?
是的,如果模型在范围内,您可以在整个应用程序中使用该模型。你的C#View Model序列化为JSON对象的引擎盖下没有太多东西。
...是变量缓存并贯穿整个生命 应用程序,并以某种方式包含该数据的全局变量?
没有什么特别之处,它表现得很正常 - 如果你在窗口或文档上创建变量,那么它将随处可用。如果您创建局部变量,则只能在该范围内使用它。
惯例是使用您需要的信息引导您的应用程序,并将该信息存储在您的应用程序命名空间中。
所以,在你的情况下,你会有类似的东西:
window.App = {
Models: {},
Collections: {},
Views: {},
Routers: {},
Resources: {}
};
// App.Resources.Photos = @Html.Raw(Json.Encode(Model));
// So let's say your ViewModel contains an array of four Photo objects
// then your bootstrap object will look something like
App.Resources.Photos = [
{ Id: 1, Name: "Photo 1", Source: "mysite/photo1.png" },
{ Id: 2, Name: "Photo 2", Source: "mysite/photo2.png" },
{ Id: 3, Name: "Photo 3", Source: "mysite/photo3.png" },
{ Id: 4, Name: "Photo 4", Source: "mysite/photo4.png" }];
(function(){
App.Models.Photo = Backbone.Model.extend({
// whatever you want in here
});
App.Collections.Photo = Backbone.Collection.extend({
model: App.Models.Photo,
url: '/api/photos'
});
App.PhotoCollection = new App.Collections.Photo(App.Resources.Photos);
})();
您现在拥有一个Backbone集合,它直接代表您的C#View模型。无需再引用返回引导对象。通常,一旦将引导对象转换为集合或模型,就不需要再引用它,因此术语引导程序 - 它纯粹是为了创建Backbone数据结构。