У меня есть мнение, как это:KNOCKOUT асинхронные наблюдаемые паттерны превращается в петлю бесконечности
<xsl:comment>ko with: resolve(1)</xsl:comment>
<xsl:comment>ko template: { name: typeName }</xsl:comment>
<xsl:comment>/ko</xsl:comment>
<xsl:comment>/ko</xsl:comment>
и ViewModel (DataContext вида) с методом, как это:
self.resolve = function (id) {
var obs = ko.observable(null);
self.getItemByIdAsync(id).done(obs);
return obs;
};
По какой-то причине это превращается в бесконечную петлю. Я предполагаю, что связанное с привязкой думает, что это зависит от значения наблюдаемого obs
, и когда он обновляется, привязка пытается снова запустить решение, и снова и снова ...
Как я могу изменить это кода, чтобы разрешение запускалось только один раз?
То, что я пытаюсь сделать, - это иметь динамическую модель обзора, которая адаптируется к тому, что представление хочет представить. Если представление пытается разрешить элемент в определенном контексте viewmodel, он должен загрузить этот элемент async, создать для него новую модель представления и добавить его в качестве модели child-view в datacontext-vm.
Я видел этот асинхронный наблюдаемый рисунок, когда в другом месте, но я, кажется, неправильно его использую.
Я пытался динамически с точки зрения получить любой асинхронный объект по id без необходимости иметь наблюдаемые объявления для каждого элемента. Но maybee (возможно) я должен немного пересмотреть свой дизайн. –