KnockoutJS数据绑定在RequireJS模块上使用instanceof

时间:2014-10-17 14:39:04

标签: knockout.js requirejs

我正在构建一组RequireJS AMD模块对象。我正在使用KnockoutJS将用户界面数据绑定到这些模块。

我定义了我的模块:

define([
   "libs/knockout",
], function(ko) {
   MyModuleClass= function() { /* Stuff */ }

   return MyModuleClass;
});

在我的视图(HTML)中,我有一个数据绑定:

<span data-bind="if: (myObservable() instanceof MyModuleClass)">
     <!-- Stuff -->
</span>

目标是在observable是MyModuleClass的实例时显示标记。否则,我不想显示该标记。

出现此问题是因为:由于我的ViewModel使用RequireJS将MyModuleClass作为范围变量加载到我的ViewModel中,因此KnockoutJS绑定没有对MyModuleClass的引用。这会导致数据绑定失败,因为在该范围内未定义MyModuleClass。 MyModuleClass还有其他从它派生的模块,因此instanceof调用非常重要,因为我仍然希望从MyModuleClass派生的子对象也传递这个数据绑定。

有没有建议干净地解决这个问题?我可以创建我可以绑定的计算变量。这些计算的observable可以使用instanceof逻辑,它将从data-bind标记中删除依赖项。这是我迄今为止最好的想法 - 但我不确定它是否像我希望的那样干净。

实现类似功能的任何干净方法都完全包含在data-bind标记中,这是我的目标。

1 个答案:

答案 0 :(得分:1)

  

出现此问题是因为:由于我的ViewModel使用RequireJS将MyModuleClass作为范围变量加载到我的ViewModel中,因此KnockoutJS绑定没有对MyModuleClass的引用。

你过度思考它,这个问题与RequireJS无关。 MyModuleClass中的// require and export MyModuleClass var MyModuleClass = this.MyModuleClasss = require("my-module-class"); 不在binding context,因此无法进行绑定。将其添加到视图模型或从绑定上下文可到达的其他位置,它将可用。例如,在视图模型中:

{{1}}