2

我想在 knockout.js 中全局公开一个可计算对象(不提升到全局 javascript 范围),例如:

<span data-binding="text: resource('test/resources', 'myresource')"></span>

或者有一些将新值传递给父值的绑定:

<span data-binding="text: {resource: res: 'test/resources', name: 'myresource'}"></span>

不幸的是,我的详尽搜索没有出现任何结果。这是可能吗?

注意:我知道我可以将它添加到 中ViewModel,但这不会处理嵌套对象,并且$root.resource对于我的标准来说不够 DRY。我也可以使用继承,但如果可能的话我想避免这种情况。本质上,我想做的是扩展 ko 中的“表达式”。

4

2 回答 2

1

好的,我要么去继承,使用这种模式,要么简单地从 ko 命名命名空间并改变它(基本上将命名空间从 ko 复制到某个对象并使用它,直到你实现所需的功能)。

于 2012-12-18T10:51:34.163 回答
1

您可以使用自定义绑定来完成此操作:

ko.bindingHandlers.resource = {
    init: function(element, valueAccessor){
        // Do here whathever you'd like to do with the resource

    }
};

您可以像标准 KO 绑定一样使用此自定义绑定,例如:

<div data-bind="resource: myResource"></div>

在这里工作小提琴

编辑根据您提供的新信息更新了我的小提琴,这里:小提琴

于 2012-12-19T13:49:55.517 回答