Javascript 从MVC3服务器端传递backbone.js的ViewModel

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

在ASP.NETMVC中有模型、视图和控制器

模型表示存储在数据库中的实体,本质上是应用程序中使用的所有数据(例如,由EntityFramework生成,“DB优先”方法)

并非所有要在视图中显示的模型数据(例如,密码哈希)。所以您可以为应用程序中的每个强类型razor视图创建视图模型。 像这样:

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.js
Model
,那么您只需将
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.js
Model
,那么您只需将
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))
。我
是主干网新手,所以我还不知道这一点。这似乎是一个解决办法,我会努力的,谢谢你的评论。我会努力做到这一点。非常感谢你!我会试着这样做。非常感谢你!