Javascript 从MVC3服务器端传递backbone.js的ViewModel
在ASP.NETMVC中有模型、视图和控制器 模型表示存储在数据库中的实体,本质上是应用程序中使用的所有数据(例如,由EntityFramework生成,“DB优先”方法) 并非所有要在视图中显示的模型数据(例如,密码哈希)。所以您可以为应用程序中的每个强类型razor视图创建视图模型。 像这样:Javascript 从MVC3服务器端传递backbone.js的ViewModel,javascript,asp.net-mvc,design-patterns,mvvm,backbone.js,Javascript,Asp.net Mvc,Design Patterns,Mvvm,Backbone.js,在ASP.NETMVC中有模型、视图和控制器 模型表示存储在数据库中的实体,本质上是应用程序中使用的所有数据(例如,由EntityFramework生成,“DB优先”方法) 并非所有要在视图中显示的模型数据(例如,密码哈希)。所以您可以为应用程序中的每个强类型razor视图创建视图模型。 像这样: using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace MyPr
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MyProject.ViewModels.SomeController.SomeAction
{
public class ViewModel
{
public ViewModel()
{
Entities1 = new List<ViewEntity1>();
Entities2 = new List<ViewEntity2>();
}
public List<ViewEntity1> Entities1 { get; set; }
public List<ViewEntity2> Entities2 { get; set; }
}
public class ViewEntity1
{
//some properties from original DB-entity you want to show
}
public class ViewEntity2
{
}
}
现在,您可以使用一些操作、事件处理程序等扩展ViewModel:
ko.utils.extend(ViewModel, {
some_function: function () {
//some code
}
});
所以,我们不再在客户机上构建相同的视图模型,而是从服务器传输现有的视图模型。至少是数据
但是knockout.js不适合我,你不能用它构建复杂的用户界面,它只是数据绑定。我需要更结构化的东西,比如backbone.js
我现在看到的为backbone.js构建ViewModel的唯一方法是用手从服务器用js重新编写相同的ViewModel
有什么方法可以从服务器传输它吗?要在服务器视图和客户端视图上重用相同的viewmodel?如果您的
viewmodel
可以一对一映射到Backbone.jsModel
,那么您只需将viewmodel
序列化为JSON,并将其作为结果返回到Backbone.js Model请求。所以在javascript模型中,指定ASP.NETMVC操作的url
Person = Backbone.Model.extend({
url: function() {
return this.isNew() ? '/Users/Create' : '/Users/' + this.get('id');
}
});
在ASP.NET MVC中,您可以编写如下内容:
var data = somedata;
var viewModel = new ViewModel();
var serializer = new JavaScriptSerializer();
viewModel.JsonData = serializer.Serialize(data);
return View("viewname", viewModel);
然后使用
<%= Model.JsonData %>
快乐编码 如果您的
ViewModel
可以一对一映射到Backbone.jsModel
,那么您只需将ViewModel
序列化为JSON,并将其作为Backbone.js Model请求的结果返回。所以在javascript模型中,指定ASP.NETMVC操作的url
Person = Backbone.Model.extend({
url: function() {
return this.isNew() ? '/Users/Create' : '/Users/' + this.get('id');
}
});
在ASP.NET MVC中,您可以编写如下内容:
var data = somedata;
var viewModel = new ViewModel();
var serializer = new JavaScriptSerializer();
viewModel.JsonData = serializer.Serialize(data);
return View("viewname", viewModel);
然后使用
<%= Model.JsonData %>
快乐编码 您通过
新的Backbone.Model(@Json.Encode(Model))
认识到主干具有同等的功能?或者更好,newmymodel继承了backbonemodel(@Json.Encode(Model))
。我是主干网新手,所以我还不知道这一点。这似乎是一个解决方案,我会试试,谢谢你的评论。你通过new Backbone.Model(@Json.Encode(Model))
意识到主干网具有同等的功能吗?或者更好,newmymodel继承了backbonemodel(@Json.Encode(Model))
。我是主干网新手,所以我还不知道这一点。这似乎是一个解决办法,我会努力的,谢谢你的评论。我会努力做到这一点。非常感谢你!我会试着这样做。非常感谢你!