我是 Require 的新手,也是 Knockout 的新手。现在我正在尝试将我的 Knockout 视图模型集成到 Reuire.js 架构中。
我有 5 个 js 文件:
- /scripts/require.js
- /scripts/jquery-2.0.3.js
- /scripts/knockout-2.2.0.js
- /scripts/app.js
- /scripts/ko-model/MyViewModel.js
这就是我从 index.html 调用 require.js 的方式:
<script data-main="/scripts/app" src="/scripts/require.js"></script>
这是入口点脚本 app.js:
require.config({
baseUrl: "/scripts",
paths: {
"jquery": "jquery-2.0.3",
"knockout": "knockout-2.2.0",
"MyViewModel": "./ko-model/MyViewModel"
}
});
require([
"jquery",
"knockout",
"MyViewModel"
],
function ($, ko, MyViewModel) {
// LOGIC:
$(function () {
ko.applyBindings(
new MyViewModel(),
$("#myId")
);
});
});
这是 MyViewModel.js 模块:
define(
'MyViewModel',
["knockout"],
function (ko) {
return function MyViewModel() {
// MyViewModel implementation
...
};
});
这对我来说很好。但。
正如您在 app.js 中看到的,我有:
function ($, ko, MyViewModel) {
// LOGIC:
$(function () {
ko.applyBindings(
new MyViewModel(),
$("#myId")
);
});
}
我不喜欢这样。我宁愿不要在这里使用 jQuery 并以某种方式指定淘汰赛上下文:
function ($, ko, MyViewModel) {
// LOGIC:
ko.applyBindings(
new MyViewModel(),
document.getElementById("myId")
);
}
但在这种情况下,淘汰赛绑定不起作用。似乎document.getElementById("myId")在这里不起作用。我不知道为什么。(我最好的猜测是调用 ko.applyBindings() 时该文档尚未加载)。
因此我有下一个问题:
如何在 LOGIC 部分中使用 jQuery 进行转义,但仍指定淘汰赛上下文?
对于改进我的代码的任何建议,我将不胜感激。