将嵌套的 Knockout.js 组件与 RequireJs 结合使用
Using nested Knockout.js components with RequireJs
我有一个 Knockout.js 组件,它使用嵌套的 pagination
组件,如下所示:
打字稿代码
import ko = require("knockout");
class NetworkListViewModel {
arrayValue = ko.observableArray<string>();
currentPage = ko.observable<number>(0);
totalItemCount = ko.observable<number>(0);
constructor(params) {
this.arrayValue = params.value
this.currentPage(1);
this.totalItemCount(params.totalItemCount);
}
}
ko.components.register("network-list", {
viewModel: NetworkListViewModel,
template: { require: "text!components/network-list/network-list.html" }
});
网页视图
<div class="network-list" >
<pagination params="CurrentPage: CurrentPage, TotalItemCount: TotalItemCount()"></pagination>
</div>
我尝试添加一个脚本以这种方式在 RequireJs 中注册它:
网页视图
<div class="network-list" >
<pagination params="CurrentPage: CurrentPage, TotalItemCount: TotalItemCount()"></pagination>
</div>
<script>
require(["components/pagination/pagination"]);
</script>
但它不起作用。
在主视图 (index.cshtml) 中注册这些依赖项是有效的。
<div id="bindingSection">
<network-list params="value: data, totalItemCount: totalItemCount()"> </network-list>
</div>
@section Scripts {
<script>
require(['pages/home',
"components/network-list/network-list",
"components/pagination/pagination"
]);
</script>
}
这样做意味着开发人员必须知道每个组件的所有子依赖项(在大型项目中并不简单)。如何指示 RequireJs 管理此嵌套组件?有没有办法将导入责任转移到子组件?
网络列表需要分页组件,因此将要求放在网络列表脚本中的适当位置:
import ko = require("knockout");
import pagination = require("components/pagination/pagination");
class NetworkListViewModel {
// code..
有一个问题,即如果您实际上没有在代码中引用导入,TypeScript 编译器将"忽略"require()
语句。您可以通过添加虚拟行来解决此问题,例如 var tmp = pagination;
,或使用替代导入语法,例如
/// <amd-dependency path="components/pagination/pagination" />
import ko = require("knockout");
class NetworkListViewModel {
// code..
此方法将强制 TypeScript 加载模块。
我经常使用这种依赖关系,效果很好。通常,视图模型的页面中只有一个require()
,其余所有内容都是继承的。
相关文章:
- javascript结合了数组和字典
- 将Firebase与Electron结合使用
- 结合jQuery和jetpack无限滚动
- 将Angular js与taglib结合使用
- 以可优化的方式使用requirejs加载模板
- RequireJS向模块传递配置总是返回undefined
- 将图像上传ajax与表单提交ajax相结合
- PhoneGap/带有RequireJS's的文本插件
- 如何正确地将参数传递给RequireJS回调函数
- 在requirejs中共享实例化对象
- 将语句与jquery相结合,并使用媒体查询来实现返回页首按钮
- What does requirejs.config() do?
- 将broccoliJS与当前使用requireJS的模块化主干应用程序结合使用,我想完全放弃requireJS
- 有可能将SYSTEMJS与REQUIREJS结合起来吗
- 将 Skrollr 和 SkrollrMenu 与 RequireJS 结合使用
- 将闭包编译器的类型安全性与AMD(requirejs)结合在一起的最可靠方法是什么?
- 将 jQuery.load 与 RequireJS 结合使用
- 将嵌套的 Knockout.js 组件与 RequireJs 结合使用
- 将RequireJS与GoogleMaps结合使用
- 如何结合CKEditor在我的应用程序代码中使用RequireJS, grunt和uglify