2013-08-13 2 views
2

Я пытаюсь преобразовать свой проект, чтобы использовать плагин перетаскивания Ryan Niemeyer (http://www.knockmeout.net/2012/02/revisiting-dragging-dropping-and.html).используя KO_Sortable после события перемещения

Я пытаюсь реализовать грязный флаг, чтобы указать, если элемент был тащили в новое место на экране, и я реализовал это с помощью свойства

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 У меня есть aftermove событие который должен установить для свойства 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 или что-то еще? любая помощь будет принята с благодарностью !!

+0

Разве вы не установите значение наблюдаемой через args.item.IsDirty (true)? –

ответ

2

Ваше IsDirty свойство, определенное с помощью this.IsDirty = new ko.observable(false);, так что оно является нокаутом наблюдаемым.

Наблюдаемые являются функциями, и вам необходимо установить их значения с вызовом их значением в качестве аргумента то, что вы хотите установить:

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

Demo JSFiddle

Смежные вопросы