Javascript 使用来自ajax的knockout.js/mapping plugin/koExternal template engine/json进行条件绑定

Javascript 使用来自ajax的knockout.js/mapping plugin/koExternal template engine/json进行条件绑定,javascript,ajax,knockout.js,knockout-mapping-plugin,Javascript,Ajax,Knockout.js,Knockout Mapping Plugin,我为一个单页应用程序设计了一个解决方案,它将用于工厂大楼的大屏幕显示,显示一组机器的状态信息和性能指标。通过一个settingsfile(通过ajax调用派生),应用程序知道应该显示哪些信息的机器。因此,对于每台机器,都会呈现一个模板,对于每台机器信息,都会呈现一个嵌套模板(koExternaltemplateengine)。第一个ajax调用还包含所有机器的ajax调用的URL。这些调用的响应包含特定于机器的值。这些调用会定期重复,并刷新显示值。所有绑定都使用knockout和mapping插

我为一个单页应用程序设计了一个解决方案,它将用于工厂大楼的大屏幕显示,显示一组机器的状态信息和性能指标。通过一个settingsfile(通过ajax调用派生),应用程序知道应该显示哪些信息的机器。因此,对于每台机器,都会呈现一个模板,对于每台机器信息,都会呈现一个嵌套模板(koExternaltemplateengine)。第一个ajax调用还包含所有机器的ajax调用的URL。这些调用的响应包含特定于机器的值。这些调用会定期重复,并刷新显示值。所有绑定都使用knockout和mapping插件进行,以避免使用硬编码的viewmodel客户端。框架和机器容器(窗格)绑定到来自第一次调用的数据,嵌套模板数据字段绑定到特定于机器的ajax调用响应中包含的数据属性

现在我的问题是:如果所有机器的所有ajax调用都提供了显示所需的数据,那么一切都正常。但是:对于某些机器,有时(也在初始加载时),调用成功(200),但只包含null(因为此时数据不可用)。 现在我有问题了。在ko.applybindings(machinedata,machinediv)之后,对于绑定值字段和ko终止绑定,我得到了“无法解析绑定”。因此,显示不完整,也不会触发更新

现在我将尝试使用if/ifnot绑定,但是如果刷新后出现初始的not-bound值,会发生什么呢?(除了ko.mapping.fromJS???之外,手动重新触发applybindings)


有人有类似的问题吗?有什么建议吗?正如我所提到的,我希望避免硬编码的视图模型,以便于将来扩展更多的机器属性。

您可以将您的机器数据存储在可观察的:

你的看法:

<div data-bind="if: machinedata()>
   <div data-bind="with: machinedata()">
      ...
   </div>
</div>
<div data-bind="if: machinedata()>
   Data could not be loaded....
</div>

只要您只绑定加载的数据而不需要任何计算,您甚至不需要ko.mapping。

听起来很适用。谢谢,delixfe!我要试试这样的。
var ViewModel = function () {
    var self = this;

    self.machinedata = ko.observable();

    self.update = function () {
        var data = someAjaxCall(); // returns the data or any falsy value
        self.machinedata(data);
    };
}

var viewModel = new ViewModel();
ko.applyBinding(viewModel);  // data does not yet exist
viewModel.update();