0

第一个网络服务:(用户)

[{id:1,用户名:“Jhon”}]

第二个网络服务:(消息)

[{id:34, Message:"这是一条消息 1", UserId:1}, {id:35, Message:"这是一条消息 2", UserId:1}]

我如何在两个 ko.obervableArrays 上映射,以便我可以在基于 UserId 的 Message ViewModel 中获取 UserName("Jhon")。

如您所知,UserId:1 是用户的外键。

我想使用 Message 和 UserName 这样的东西。

  • 数据绑定=“文本:用户名”

  • 数据绑定=“文本:消息”

4

2 回答 2

2

如果您使用 Breeze 之类的 JavaScript 库,您的生活将会大大简化。如果没有 Breeze,您将需要在 JavaScript 中创建模型类,就像在 EF 的模型类中一样。基本上,您将需要维护后端模型定义和前端模型定义,并确保它们匹配。

我强烈建议您查看微风js.com,因为我无法强调这将使您的生活变得多么容易。Breeze 可以从您的 EF 数据上下文中继承您的元数据,并从一开始就正确映射所有内容,它与淘汰赛一起工作,它将为您节省数周的开发时间。

如果您愿意,还可以使用 Knockout 映射插件Using Knockout mapping for complex JSON

于 2013-07-15T15:12:08.547 回答
1

您可以使用create映射插件的选项来包含用户数据,如下所示:http: //jsfiddle.net/H4QfX/

var userData = [{id:1, UserName:"Jhon"}],
    messageData = [{id:34, Message:"This is a message 1", UserId:1}, {id:35, Message:"This is a message 2", UserId:1}];

var users = ko.mapping.fromJS(userData);
var viewModel = ko.mapping.fromJS(messageData, {
    'UserId': {
        create: function(options) {
            return ko.utils.arrayFirst(users(), function(u) {
                if (u.id() == options.data) {
                    return u;
                }
            });
        }
    }});

ko.applyBindings(viewModel);
于 2013-07-15T15:25:49.270 回答