Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js 删除自定义绑定在更新前获取值_Knockout.js_Custom Binding - Fatal编程技术网

Knockout.js 删除自定义绑定在更新前获取值

Knockout.js 删除自定义绑定在更新前获取值,knockout.js,custom-binding,Knockout.js,Custom Binding,我有一个自定义绑定,它实现了更新 我想知道调用update之前的值是多少。我看不出它被传递到任何参数中。我错过了吗 ko.bindingHandlers.ticker= { update: function (element, valueAccessor, allBindingsAccessor) { var toNumber = ko.utils.unwrapObservable(valueAccessor()); var

我有一个自定义绑定,它实现了更新

我想知道调用update之前的值是多少。我看不出它被传递到任何参数中。我错过了吗

    ko.bindingHandlers.ticker= {
        update: function (element, valueAccessor, allBindingsAccessor) {
            var toNumber = ko.utils.unwrapObservable(valueAccessor());
            var fromNumber = 0; //<---- can i set this to the old value?

            var counter = new Ticker(element, fromNumber, toNumber);

            counter.start();
        }
    }
ko.bindingHandlers.ticker={
更新:函数(元素、valueAccessor、allBindingsAccessor){
var toNumber=ko.utils.unwrapobbservable(valueAccessor());

var fromNumber=0;//假设ticker将元素值从
fromNumber
更新到
toNumber
,您可以将其实现为可观察的,然后使用
文本
绑定来更新元素。如果ticker纯粹用于UI,并且其状态不应反映在模型中,那么对于
valueAccessor()
,使用对象而不是可观察对象,以这种方式获取from和to


如果您仍然需要原始状态,那么还可以使用绑定的
init
来捕获原始值。

有两种方法:

1) 使用
ko.utils.domData
API将一些数据存储到元素中

// Read previous data
var prevData = ko.utils.domData.get(element, 'dataKey');
var newData = 42;

// Remember data for next time update is called
ko.utils.domData.set(element, 'dataKey', newData);
2) 完全不要使用更新。使用更新所做的一切都可以使用计算订阅或简单订阅

ko.bindingHandlers.ticker = {
    init: function (element, valueAccessor, allBindingsAccessor) {
        var toNumber = ko.utils.unwrapObservable(valueAccessor());
        var fromNumber = 0;        

        function startTicker(toNumber) {
            var counter = new Ticker(element, fromNumber, toNumber);
            counter.start();
            fromNumber = toNumber;
        }

        ko.computed(function () {
            startTicker(toNumber);
        }, null, { disposeWhenNodeIsRemoved: element });
    }
}

请注意,如果删除dom节点,计算出的数据将被安全地处理。

我不相信它已传入。也许您可以将其作为属性存储在元素上,因此下次运行
update
时它仍在那里?应该可以,因为您有类似jQuery类型的插件绑定处理程序,可以更新元素上的插件选项n还有一个
update
,因为您正在创建一个新的
Ticker()
在绑定内部,您实际上与
ko.components
使用提供给
viewModel
的函数所做的一样,但缺点是您以后无法访问JS属性。虽然这种方法非常有效,但在我看来,它似乎更加一致&与存储所有模型数据的MV*模式一致JS中的属性,而不是内部DOM属性。