我正在构建一组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标记中,这是我的目标。
答案 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}}