0

カスタムノックアウトエクステンダーでjQuery関数を使用するにはどうすればよいですか。これは、カスタムエクステンダーからノックアウトターゲットにクラスを追加する例です。

ko.extenders.addClass = function(target, option) {
    if (option == true)
    {
        target.subscribe(function(newValue) {
            $(this.target).addClass('new_class');
        });
    }
    return target;
}
4

1 に答える 1

1

通常のdirty-flagとcss-bindingを組み合わせます。

ko.dirtyFlag = function(root) {
    var result = function() {}, // A function will not get serialized to JSON
        _initialState = ko.observable(ko.toJSON(root));

    result.isDirty = ko.dependentObservable(function() {
        return _initialState() !== ko.toJSON(root);
    });

    result.reset = function() {
        _initialState(ko.toJSON(root));
    };

    return result;
};

function ViewModel() {
    // Normal properties
    this.someProperty = ko.observable("initial value");

    // Dirty-flag for this object.
    this.dirtyFlag = ko.dirtyFlag(this);
}
<div data-bind="css: { 'new_class': dirtyFlag.isDirty }"></div>

プロパティのサブセットのみを追跡する場合は、オブザーバブルまたはオブザーバブルの配列を渡すこともできます。

this.dirtyFlag = ko.dirtyFlag(this.someProperty);

http://jsfiddle.net/MizardX/7esdy/

于 2012-12-11T06:53:37.830 に答える