$элемент не определен

Мое приложение использует его и имеет проблему с полем $item под Knockout 3.4.0. Мне нужно получить доступ к parentList, в котором хранится исходный родительский элемент элемента, перетащенного в другой список.

Приведенный ниже код не будет работать с последней версией Knockout, и шаблоны jQuery являются одной из его зависимостей. Я ищу причину, решение или обходной путь.

JSFiddle с подробным примером: http://jsfiddle.net/piglin/UAcC7/1837/

Uncaught ReferenceError: Unable to process binding "template: function (){return { name:'rowTmpl',foreach:$data.children,templateOptions:{ parentList:$data.children}} }"
Message: Unable to process binding "template: function (){return { name:'cellTmpl',foreach:$data.children,templateOptions:{ parentList:$data.children}} }"
Message: Unable to process binding "sortableItem: function (){return { item:$data,parentList:$item.parentList} }"
Message: $item is not defined

ko.bindingHandlers.sortableList = {};
ko.bindingHandlers.sortableItem = {
  init: function(element, valueAccessor) {
    var options = valueAccessor();
  }
};
var viewModel = function() {
  var self = this;
  self.children = ko.observableArray(
    [{}]
  );
};
ko.applyBindings(new viewModel());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script src="https://rniemeyer.github.com/KnockMeOut/Scripts/jquery.tmpl.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script>

<div data-bind="template: { name: 'tmpl', foreach: $data.children, templateOptions: { parentList: $data.children } }">
</div>

<script id="tmpl" type="text/html">
  <div data-bind="sortableItem: { item: $data, parentList: $item.parentList }">
  </div>
</script>


person Peter G.    schedule 25.01.2016    source источник
comment
Не могли бы вы вместо этого использовать шаблоны Knockout?   -  person Roy J    schedule 25.01.2016
comment
попробуйте сделать внутри tmpl и в привязке sortableItem, parentList: $parent.children вместо parentList: $item.parentList   -  person Bogdan Goie    schedule 25.01.2016
comment
В привязке шаблона foreach вы можете получить доступ к родительской модели представления, используя $parent. Таким образом, вы можете просто использовать $parent.children вместо $item....   -  person Michael Best    schedule 28.01.2016


Ответы (2)


Кажется, имя вашего шаблона - "cellTmpl", но в привязке вы указали имя: "tmpl"

person shu    schedule 25.01.2016

Настоящая проблема заключается в том, что плагин jQuery templates не загружается во время прикрепления HTML-документа к моей странице Knockout JS.

У меня правильно настроен RequireJS, и, похоже, это проблема с жизненным циклом Knockout, мне нужно, чтобы зависимость jQuery templates загружалась на этапе activate, и я работаю над примером кода для достижения этого.

person Peter G.    schedule 26.01.2016