javascript - knockoutjs绑定(bind)不同的API对象

标签 javascript knockout.js dojo

我正在使用 javascritp 处理一些 API,例如 dojo 工具包、谷歌地图 API、Arcgis API,... 我想通过 knockout 将对象绑定(bind)到 View 侧。但API有自己特定的对象。例如:

一些API:

var map = new Map();

var layer = new BaseMapLayer();
map.add(layer)

var pointLayer = new PointLayer("name", {visible: true});
map.add(pointLayer);

API 开发人员给了我一个 PointLayer 对象。我可以在构造函数中设置一些选项,例如在 map 上显示可见。我们不知道它在后台做什么。这并不重要。

PointLayer 为我们提供了两种更改可见性的方法。

pointLayer.Show();
pointLayer.Hide();

但是我们不能使用pointLayer.visibile = false或true

就像这个例子一样,我实际上想通过 knockout 来绑定(bind)对象。

var viewModel = {
     layers:[pointLayer]
} 
ko.applyBindings(viewModel);

如何将图层可见性绑定(bind)到复选框?

最佳答案

您应该扩展或包装 PointLayer 对象,以便扩展/包装器具有 writeable computed observable沿着这些思路:

var _isVisible = ko.observable(false);

pointLayer.isVisible = ko.computed({
    write: function(val) {
        _isVisible(val);
        if (!!val) { pointLayer.Show(); }
        else { pointLayer.Hide(); }
    },
    read: _isVisible;
});

_isVisible observable 有点像 isVisible“属性”的私有(private)支持字段。它保持实际状态。 (如果 pointLayer 对象确实具有用于可见性的readonly属性,那么最好只使用该属性。)。

isVisible 计算的可观察量将做两件事:

  • 写入:根据新值显示或隐藏图层。
  • 读取:仅返回图层的当前状态。

此可观察量可以正常绑定(bind)到复选框。

关于javascript - knockoutjs绑定(bind)不同的API对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21847355/

相关文章:

javascript - 修改方法以显示成功/失败消息。 AngularJS

javascript - 无法将项目添加到 JS map

javascript - Dojo 1.6 - 设置 Dijit.Select 按标签选择

javascript - Dojo 中的日期和时间小部件

javascript - 将内容插入 Wordpress 帖子编辑器

javascript - 转置 JSON

knockout.js - 在knockoutJS中使用按钮删除表格行

javascript - 无法查看可观察对象上的数据

javascript - 数据绑定(bind)不适用于 View 模型

javascript - dojo 图表 - 轴标签不适合图表