移动事件后使用KO_Sortable

时间:2013-08-13 20:22:22

标签: jquery knockout.js knockout-2.0 knockout-sortable

我正在尝试将我的项目转换为使用Ryan Niemeyer的拖放插件(http://www.knockmeout.net/2012/02/revisiting-dragging-dropping-and.html)。

我正在尝试实现一个脏标志,以指示项目是否已被拖动到屏幕上的新位置,并且我已使用IsDirty属性实现了此项

var AccountViewModel = function(data) {
        this.$type = 'AccountViewModel';
        this.IsDirty = new ko.observable(false);
        ko.mapping.fromJS(data, mapping, this);

        this.add = function(item) {
            this.Accounts.push(item);
        };
    };

我有一个应该将IsDirty属性设置为true的余下事件,但出于某种原因,我必须将对象移动两次,然后我的数据绑定才能将其拾取。

    ko.bindingHandlers.sortable.afterMove = function(args) {
        args.item.IsDirty = true;
    };

<div class="accounts" data-bind="sortable: { data: Accounts }">
            <div class="row" data-bind="css: { dirty: IsDirty, newItem: IsNewAccount }">
                <div class="actions item"></div>
                <div class="accountItem item" data-bind="text: IsDirty"></div>
                <div class="accountItem item" data-bind="text: AccountName"></div>
                <div class="accountItem item" data-bind="text: IACode"></div>
                <div class="accountItem item" data-bind="dateFormat: OpenDate"></div>
                <div class="accountItem numberItem item" data-bind="text: T12Revenue"></div>
                <div class="accountItem numberItem item" data-bind="text: AUA"></div>
                <div class="accountItem item"></div>
                <div class="actions item"><img id="delete" src="~/Images/delete.png"/></div>
            </div>
        </div>

我是否必须强制刷新KO或其他什么?任何帮助将不胜感激!!

1 个答案:

答案 0 :(得分:2)

您使用IsDirty定义的this.IsDirty = new ko.observable(false);属性,因此可以观察到它。

Observables是函数,您需要设置它们的值,并使用值作为参数来调用它们:

ko.bindingHandlers.sortable.afterMove = function(args) {
    args.item.IsDirty(true);
};

演示JSFiddle