javascript - knockout MVC,绑定(bind)模型并将对象添加到模型

标签 javascript asp.net asp.net-mvc asp.net-mvc-4 knockout.js

如何将项目添加到 List<ComplexObject>KnockoutJS

这是我的模型:

public class MyModel
{
   public List<User> Users { get; set; }
}

public class User
{
   public int Id { get; set; }
   public string Name { get; set; }
}

这是客户端脚本:

<script type="text/javascript">
   var viewModel = ko.mapping.fromJS(@Html.Raw(Json.Encode(Model)));
   ko.applyBindings(viewModel);

   // attempt:
   var newUser = [{ "Id": "13", "Name": "John" }];
</script>

如何添加 newUserviewModel

最佳答案

我会按照以下方式进行。

  1. 创建一个用户对象
  2. 创建一个映射,将返回的对象映射到新的用户对象
  3. 使用简单的推送来添加新的用户对象

请查看下面的完整代码并附上评论

// 1. Create a User object
var User = function (Id, Name) {
    self = this;
    self.Id = Id;
    self.Name = Name;
}

// 2. Create a mapping
var mapping = {
    'Users': {
        create: function(options) {
            return new User(options.data.Id, options.data.Name);
        }
    }
}

var data = @Html.Raw(Json.Encode(Model));
var viewModel = ko.mapping.fromJS(data, mapping);

// output to verify binding
console.log(viewModel);

// 3. Add the new User object
viewModel.Users.push(new User(2, "Jim"));

// output to verify added user
console.log(viewModel.Users());

更新:

这是一个针对列表的 jsfiddle:

http://jsfiddle.net/6qsjz/12/

更新 2

空问题似乎是你没有初始化集合,像这样向你的模型添加一个构造函数:

 public MyModel()
 {
     Users = new List<User>();
 }

关于javascript - knockout MVC,绑定(bind)模型并将对象添加到模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20441199/

相关文章:

javascript - 从服务器(API?)获取数据并将其显示在 HTML 页面上

c# - 如何获取加载返回值

c# - 400 错误请求仅在 Android 应用程序中无效的主机名

jquery - 重新加载页面后如何突出显示导航栏中的事件菜单项

asp.net-mvc - IIS7 上的损坏图像

c# - 无法使用数据注释在 MVC 4 中设置日期时间格式

javascript - 如何重定向页面

javascript - Overpass Turbo 中的位置查询

javascript - 滚动到 div 顶部

c# - 将 CSS 文件添加到 aspx 文件