Bro*_*ato 8 knockout.js breeze durandal
我用durandal/breeze开发了一个asp.net mvc解决方案.
我有一个下拉列表,其中列表是由实体框架代码优先提供的枚举填充的.这是模型服务器端:
public enum EnumCategory
{
Cat1,
Cat2,
Cat3,
Cat4
}
Run Code Online (Sandbox Code Playgroud)
这是使用此枚举的表:
public class Transport
{
[Key]
public int Id { get; set; }
public EnumCategory Category { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
我的问题:如何检索枚举服务器端的这些值,以便能够填充我的下拉客户端?我是否必须手动创建一个新的数组客户端,如下所示:
var categories = [
{ id: '' , description: '' },
{ id: 'Cat1', description: 'Category 1' },
{ id: 'Cat2', description: 'Category 2' },
{ id: 'Cat3', description: 'Category 3' },
{ id: 'Cat4', description: 'Category 4' }];
Run Code Online (Sandbox Code Playgroud)
我的视图显示此下拉列表,如下所示:
<select data-bind="options: $root.categories,
optionsText: 'description',
optionsValue: 'id',
value: category,
validationOptions: { errorElementClass: 'input-validation-error' },
valueUpdate: 'afterkeydown'">
</select>
Run Code Online (Sandbox Code Playgroud)
我不得不重新创建一个客户端值列表,因为我们已经有了服务器端的值列表.
任何的想法?
谢谢.
小智 1
作为同时的解决方法,您可以从元数据创建全局“枚举”,如下所示:
manager.fetchMetadata()
.then(function (data) {
// extract all enums als global objects
ko.utils.arrayForEach(data.schema.enumType, function (c) {
window[c.name] = {};
ko.utils.arrayForEach(c.member, function (m) {
window[c.name][m.name] = m.value;
});
});
});
Run Code Online (Sandbox Code Playgroud)
因此,如果您有一个名为“Status”的枚举,那么您现在将拥有一个可以调用的全局对象:
var currentStatus = Status.Done; //returns the value as defined in the server side enum
Run Code Online (Sandbox Code Playgroud)
这些也可以绑定到下拉菜单
| 归档时间: |
|
| 查看次数: |
6187 次 |
| 最近记录: |