javascript - 在没有 viewModel 的情况下使用 ko.observable 数组

标签 javascript knockout.js devextreme

我想在没有 View 模型的情况下使用 knockout 可观察量。我只是想使用一个 observableArray 作为 DevExtreme 数据网格的数据源。所以现在,我的想法相当简单:我只是将一个变量(shuttleList)声明为空的 ko.observableArray。后来,我通过 ajax 请求来填充它。我的网格设置为该变量作为数据源。

但是,当我更改数组时,什么也没有发生。尽管如此,我仍然必须使用其选项方法手动替换网格的数据源。我做错了什么?

shuttleList = ko.observableArray([]);

$.getJSON('http://someCall?ID=' + id, function (e) {
    shuttleList(e.tourenList.find(x => x.title == 'Base').shuttleList);
});

var grid = $("#gridContainer").dxDataGrid({
    dataSource: shuttleList,
    …
});

知道这不是 knockout 应该使用的方式,但是我可以以某种方式使其自动工作 - 而无需在shuttleList.subscribe事件中进行一些手动网格刷新吗?

顺便说一下,仅仅调用网格的refresh()/repaint()方法也没有帮助。我还没有找到重置其 dataSource 选项的方法。

grid.option('dataSource', shuttleList);

预先非常感谢您的帮助!

最佳答案

我认为您所缺少的只是使用 ko.applyBindings 初始化 knockout 绑定(bind),并且您可以在调用该函数时使用特定元素。 “ View 模型”可以像对象括号一样简单,其中包含变量:

ko.applyBindings({shuttleList}, document.getElementById("gridContainer"));

var shuttleList = ko.observableArray([]);
setTimeout(function(){shuttleList.push("success!")}, 1000);

ko.applyBindings({shuttleList}, document.getElementById("gridContainer"));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<span>waiting for update...</span><br/>
<span id="gridContainer" data-bind="text: shuttleList"></span>

关于javascript - 在没有 viewModel 的情况下使用 ko.observable 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42769643/

相关文章:

javascript - 我的 if 语句有问题吗?

javascript - 从.ajax()调用加载knockout.js observableArray()

javascript - 在 KnockoutJS 中使用 React 组件

javascript - dxDataGrid - 如何刷新小部件

javascript - DevExtreme - 尝试从 SQL 将数组分配给 dxList

javascript - 如何在我的 React 应用程序中实现 Sequalize API?

javascript - 预选 UI 上的下拉菜单

javascript - Knockout.js 主视图模型中的一个 View 模型(添加项变为未定义)

javascript - 无法在 jsFiddle 中呈现 DevExtreme 饼图

javascript - JavaScript 中的 [keys[i]] 是什么?