KnockoutJs 1.3 beta. _destroy: false имеет тот же результат на пользовательском интерфейсе, что и _destroy: true - PullRequest
0 голосов
/ 06 октября 2011

Используя asp.net mvc, я передаю view-модель вниз и получаю нокаут, чтобы сопоставить view-модель и привязаться к ней.

Это все работает нормально для меня, то, что я пытаюсь сделать, это отслеживать удаление.

Я думал, что смогу сделать это, добавив свойство _destroy, но установив для него значение false.

Я надеялся, что пользовательский интерфейс будет игнорировать это до тех пор, пока уничтожение не установит его в значение true.

Но, похоже, это не так, и простое присутствие этого свойства приводит к тому, что оно считается уничтоженным.

Это ошибка или я исправляю это неправильно?

Большое спасибо, Кохан

  var model = [{"Id":1,"Name":"Bikes","Parent":null,"_destroy":false},
  {"Id":2,"Name":"Components","Parent":null,"_destroy":false},
  {"Id":3,"Name":"Clothing","Parent":null,"_destroy":false},
  {"Id":4,"Name":"Accessories","Parent":null,"_destroy":false},
  {"Id":5,"Name":"Mountain Bikes","Parent":1,"_destroy":false},
  {"Id":6,"Name":"Road Bikes","Parent":1,"_destroy":false},
  {"Id":7,"Name":"Touring Bikes","Parent":1,"_destroy":false},
  {"Id":8,"Name":"Handlebars","Parent":2,"_destroy":false}] ;

Ни один из вышеперечисленных элементов не покажет.Даже "_destroy": null имеет тот же эффект.

Рабочий пример проблемы ...

http://jsfiddle.net/jy53e/6/

Обновление: похоже, проблема с отображениемрасширение.

1 Ответ

5 голосов
/ 07 октября 2011

То, что происходит, это то, что вы отправляете _destroy через подключаемый модуль сопоставления, и это становится наблюдаемым. Knockout не ожидает, что это будет наблюдаемая (функция), поэтому, когда он делает проверку, такую ​​как if (_destroy), результат будет истинным, потому что _destroy - это функция, и она не развернута, чтобы увидеть ее значение.

Вы можете сделать что-то вроде: http://jsfiddle.net/rniemeyer/jy53e/7/, чтобы предотвратить превращение _destroy в наблюдаемое.

Итак, используйте параметры отображения:

var mappingOptions = {
    create: function(options) {
        return ko.mapping.fromJS(options.data, { copy: ["_destroy"] }); 
    }
};
...