使用ko.extenders更改ko映射值的最佳方法是什么?

时间:2014-02-11 19:48:20

标签: knockout.js knockout-mapping-plugin

我有一些问题用ko.mapping翻译/替换data-bind的值,这是我到目前为止所尝试的

我的观点

<span data-bind="translate: address.place"></span>

注意:address.place将由来自服务器的ko.mapping设置

我的viewModel

   ko.bindingHandlers.translate = {
        init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
            console.log(viewModel.address.city);// how i can get the cityName

            if (viewModel.address.street._latestValue == "koeln") {
                //set back city to  cologne
            }

        },
        update: function (element, valueAccessor) {
            ////

        }
    };

1 个答案:

答案 0 :(得分:1)

这与KO映射插件没有任何关系。假设您正确地将初始数据放入viewmodel(无论您是否使用映射插件),您的所有绑定处理程序正在改变UI中显示的内容。

您可以通过通常名为bindingContext的绑定处理程序中的a参数访问视图模型的其他成员。有关详细信息,请参阅this section of the KO docs

所以你可以像这样重写你的绑定处理程序:

  ko.bindingHandlers.translate = {
        init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
            console.log(bindingContext.$data.address.city());// the cityName

            if (bindingContext.$data.address.street._latestValue == "koeln") {
                //set back city to  cologne
                bindingContext.$data.address.city('cologne');
            }

        },
         /// add your update section if needed
    };