手动Breeze.js元数据为Array类型

时间:2014-02-26 22:37:39

标签: knockout.js breeze

是否有人为数组类型手动构建元数据?例如,我只想绑定一个

列出selectedIds;

到客户端的元数据。然后我想将它绑定到一个对应于某些复选框值的数组。奇怪的是,当我创建我的新实体时,我发送给我的属性的值没有绑定并发送到服务器。

var registrationFormModel = ko.observable(); registrationFormModel({selectedIds:ko.observableArray(),name:ko.observable()});

稍后我将一个名称和selectedIds设置为一个int数组。但它没有映射到我的实体。有没有办法获得数组类型属性?

2 个答案:

答案 0 :(得分:1)

您当然可以定义一个数据属性,它是一个简单值数组(例如,一个整数数组)。您还可以定义一个属性,它是一个“复杂类型”数组(正如Breeze理解的那样)。

这些是数组数据属性。它们不是集合导航属性如果您想使用它们来获取和展示其隐含的相关实体,您必须自己管理它。

您没有告诉我们您如何在服务器上存储数据。您似乎没有使用关系数据库,因为RDB不支持数组属性。文档数据库(例如,MongoDb)DOES。

从微风的角度来看,这没关系。但是,如果我们要提供适当的帮助,请务必询问并了解您正在做的事情。

您的问题提醒我,我们的文档不包含数组数据属性。 “zza-node-mongo”示例确实说明了手工创建的元数据中的数组属性。

Here是整数FK ID数组的元数据定义的一个例子,这是你寻求的,对吗?

Here导航属性的复杂类型数组的示例。

  

此元数据样本依赖于Breeze Labs中的“metadata-helper”。这就是为什么您看到hasMany: true这是实际Breeze元数据等效的别名isScalar: false

答案 1 :(得分:-1)

目前我不认为你可以创建一个简单对象数组的属性。

可以使用两种方法 -

  1. 将您的Id的集合作为具有名称/值对象的复杂类型从服务器传递下来 -

    [{id: 1}, {id: 2}]

  2. 使用JsonResultsAdapter将简单数组映射到类似于上面提到的复杂类型 -

    if (node.IntArray) { var tempArray = []; $.each(node.IntArray, function (index, item) { tempArray.push({id: item}); } node.IntArray = tempArray; }