如何将视图模型外部的常量传递给 Knockout 绑定?

Posted

技术标签:

【中文标题】如何将视图模型外部的常量传递给 Knockout 绑定?【英文标题】:How to pass a constant outside of a viewmodel to a Knockout binding? 【发布时间】:2017-09-02 18:25:15 【问题描述】:

假设有一个枚举和一个视图模型:

var MyEnum = 
   Val1 = 1,
   Val2 = 2
;

var someViewModel = ;
ko.applyBindings(someViewModel);

还有一个观点:

<div data-bind="template: 'my-template', data: MyEnum.Val1"></div>

我找不到将MyEnum.Val1 的值传递给绑定的方法,因为 Knockout 在视图模型中查找它。在前面加上$root.MyEnum.Val1 也不起作用,因为它仍然会在视图模型中显示。

任何想法如何让它工作?

【问题讨论】:

您为什么要这样做?您可以通过在视图模型的初始化期间将常量传递给视图模型来做到这一点 你的意思是让它成为视图模型的一部分吗? var someViewModel = MyEnum: MyEnum 怎么样? 【参考方案1】:

我更喜欢先将 viewModel 声明为函数,而不是直接将它们作为对象。通过这样做,我们可以在将来需要时重用它,并且在初始化期间将有一个更简洁的过程将对象传递给该视图模型。

示例如下:

function someViewModel(enum) 
  this.myEnum = enum;
;

var MyEnum = 
  Val1: 1,
  Val2: 2
;

ko.applyBindings(new someViewModel(MyEnum));

然后在 html 中你可以执行以下操作

<div data-bind="template: 'my-template', data: myEnum.Val1"></div>

【讨论】:

以上是关于如何将视图模型外部的常量传递给 Knockout 绑定?的主要内容,如果未能解决你的问题,请参考以下文章

在 knockout.js 中将 observable 从一个视图模型传递到另一个视图模型

将 json 传递给视图模型时保持安全

两个视图模型之间的淘汰赛传递值

MVC 4如何将模型属性列表从视图传递给Action

将模型传递给视图

Knockout 将 2 个链接绑定到不同的视图并切换模型视图