Jquery mobile 在子jquery移动页面中初始化knockoutjs内容
我知道有很多关于jquery mobile/knockoutjs集成的问题,但是我找不到一个线程来解决我的问题。我有一个主视图模型,其中包含子视图模型,因此我在页面加载时对此进行初始化,因为该事件仅在应用程序加载时触发:Jquery mobile 在子jquery移动页面中初始化knockoutjs内容,jquery-mobile,knockout.js,Jquery Mobile,Knockout.js,我知道有很多关于jquery mobile/knockoutjs集成的问题,但是我找不到一个线程来解决我的问题。我有一个主视图模型,其中包含子视图模型,因此我在页面加载时对此进行初始化,因为该事件仅在应用程序加载时触发: var viewModel=null; $(函数(){ 调试(“运行init”); viewModel=新的viewModel(); 应用绑定(视图模型); }); 这在我的应用程序的第一个页面上非常有效,但是当我转到子页面时,knockoutjs内容不会显示,因为jquer
var viewModel=null;
$(函数(){
调试(“运行init”);
viewModel=新的viewModel();
应用绑定(视图模型);
});
这在我的应用程序的第一个页面上非常有效,但是当我转到子页面时,knockoutjs内容不会显示,因为jquery mobile动态加载了html,knockout不知道如何更新绑定的内容。我试图告诉它通过使用$(document.delegate
函数进行动态更新,但是我正在努力解决它应该如何实现的问题
-
var-load=false;
$(文档).delegate(“#页面加速”,“pagebeforecreate”,函数(){
如果(!已加载){
加载=真;
应用绑定(视图模型);
}
否则{
$(“#超速”)。触发(“刷新”);
}
});
我将委托函数放在调用它的页面中,因为这显然是使用委托的一个要求。然后在这个子页面的第一次加载时,我调用ko.applyBindings(我只想在应用程序加载时调用它,但我无法让触发器(“create”)工作。在随后的调用中,它将调用触发器(“refresh”)(这对我不起作用)但问题是,每次我转到子页面时,都会添加委托函数。因此,在第一次加载子页面时,它将调用委托回调函数一次。如果我返回主页面,然后返回子页面,它将调用委托回调函数两次,依此类推
有人能为我推荐一种方法来刷新子页面上的knockoutjs绑定吗?这就是最终对我有效的方法。我不知道是否有更好的方法
var viewModel = null;
$(function () {
console.debug("running init");
viewModel = new ViewModel();
ko.applyBindings(viewModel);
var pages = [
"scorecard", "speeding", "leaderboard"
];
_.each(pages, function (page) {
$(document).on("pagebeforecreate", "#page-" + page, function () {
console.debug("applying " + page + " bindings");
ko.applyBindings(viewModel, $("#page-" + page)[0]);
});
});
});
我在jQM中使用knockout时遇到了很多问题,结果根本没有使用它。但我通过为每个页面分配一个id并将dom元素作为参数传递给knockout来解决了这个问题,例如
ko.applyBindings(viewModel,$(“#mypage div:jqmData(role='content')[0])
。首先,使用$('#加速')。listview('refresh'))
并将.delegate
替换为.on
@Omar-如果我做$(文档)。on(“#页面加速”,“pagebeforecreate”,函数(){});那么该函数根本就不会被调用…@jgillich-感谢您的响应,但是您在应用绑定时没有明确说明。您是在第一次加载时应用每个元素id的绑定,就像我在上面所做的那样(减去每个元素id),还是使用$(文档).以某种方式委派,但不存在我上面提到的问题?请尝试此$(文档)。在('pagebeforeshow','#page speeding',函数()上{
这正是我所使用的。我在这个主题上做了大量搜索,并阅读了无数论坛帖子-没有更好的方法了。他们制作的JavaScript框架在大量使用JavaScript的应用程序中效果不佳。。。