Knockoutjs - 我可以使用视图模型参数创建一个foreach绑定吗?

问题描述:

我想创建一个排序表,其中我列出Knockoutjs - 我可以使用视图模型参数创建一个foreach绑定吗?

我要以这种方式有些MVC模型到柯视图模型映射某些型号:

function User(data) { 
    this.userAlias = ko.observable(data.UserAlias); 
    this.userFirstName = ko.observable(data.UserFirstName); 
    this.userLastName = ko.observable(data.UserLastName); 
}; 

function Day(data) { 
    var self = this; 

    self.date = ko.observable(data.Date); 
    self.dateStr = ko.observable(data.dateStr); 
    self.dtDay = ko.observable(data.dtDay); 
    self.value = ko.observable(data.Value); 

    self.users = ko.observableArray([]); 
}; 

Day()users值是一个数组User()
如何构建一个有效的数组以便将其用作参数?

+0

你从哪里得到'User'数据? – christiandev

+0

我使用'$ .getJSON'操作检索日期和用户数据。 – krvl

+1

只是一个提示,看看映射插件:http://knockoutjs.com/documentation/plugins-mapping.html –

Day view model会是这个样子,如果你调用Ajax ...

function Day(data) { 
    var self = this; 

    self.date = ko.observable(data.Date); 
    self.dateStr = ko.observable(data.dateStr); 
    self.dtDay = ko.observable(data.dtDay); 
    self.value = ko.observable(data.Value); 

    self.users = ko.observableArray([]); 

    var users = this.users; 

    //get users and push into observable array 
    $.getJSON('url', function (json) { 
      var mappedData = ko.utils.arrayMap(json, function (u) { 
       return new User(u.UserAlias, u.UserFirstName, u.UserLastName); 
      }); 
     users(mappedData); 
     }); 
}; 

你的标记会是这个样子。 ..

data-bind="foreach: users" 

您可以使用ko.toJSON如下:

var raw = ko.toJSON(self.users());