淘汰MVC,绑定模型&将对象添加到模型中
Knockout MVC, bind model & add object to model
如何使用KnockoutJS
将项目添加到List<ComplexObject>
?
这是我的型号:
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>
如何将newUser
添加到viewModel
?
我会按照以下方式来做。
- 创建用户对象
- 创建一个映射,将返回的对象映射到新的User对象
- 使用简单的推送添加新的User对象
请参阅下面的完整代码和评论
// 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>();
}
看看这个小提琴。。。
http://jsfiddle.net/6qsjz/4/
它有点像你的。应在应用绑定之前定义视图模型元素以及rawData。
var rawData = { "OtherStuff": { }, "User": {"id": "1", "name": "Bob"} }
....
viewModel = new ViewModel(rawData);
ko.applyBindings(viewModel, document.getElementById('domElementToBind'));
然后我展示了两个创建对象的不同示例。检查小提琴,并跟进任何进一步的问题。
-----编辑-----以下是更新,以便您可以添加更多用户。关键是让User-->用户成为一个可观察的数组,并开始向它推送新用户
http://jsfiddle.net/6qsjz/13/
self.newUser = new User();
self.addUser = function() {
self.Users.push(self.newUser);
}
-----编辑-----哎呀。这就是我不左顾右盼的结果。
http://jsfiddle.net/6qsjz/17/
self.addUser = function() {
self.Users.push(new User(self.newUser.id(), self.newUser.name()));
相关文章:
- 无法在mvc视图中使用ajax调用获取操作返回的模型对象列表
- 通过拖动可以更改三维模型对象在Three.js场景中的位置
- ng模型对象到字符串
- 以角度更新整个模型对象
- 根据服务器的初始标记填充knockoutJS视图模型对象
- 将模型/对象放在Http Get-URL上
- 模型对象构造函数中的节点mysql查询
- 如何将模型对象传递给 javascript 函数
- AngularJS - ng-repeat,更新尚未定义的模型对象索引
- 将模型对象传递到主干中的视图
- 主干集合的模型对象结构不正确
- 一个应用程序中多个模型对象的角度 CRUD
- 将静止响应转换为模型对象
- 如何使用角度模块在视图中识别模型对象
- 如何传递ng模型对象而不是指令内部的值
- 如何使用服务器响应更新Restangular模型对象
- 带有Ember数据的Ember.js.模型对象_attributes在保存时未持久化为_data
- Meteor的事件处理函数中的this:这是如何绑定到模型对象的
- EXT JS 5:为什么我不能获得引用类型的模型对象
- 将模型对象绑定到JavaScript数组时出现语法错误