Jquery mobile 在子jquery移动页面中初始化knockoutjs内容

Jquery mobile 在子jquery移动页面中初始化knockoutjs内容,jquery-mobile,knockout.js,Jquery Mobile,Knockout.js,我知道有很多关于jquery mobile/knockoutjs集成的问题,但是我找不到一个线程来解决我的问题。我有一个主视图模型,其中包含子视图模型,因此我在页面加载时对此进行初始化,因为该事件仅在应用程序加载时触发: var viewModel=null; $(函数(){ 调试(“运行init”); viewModel=新的viewModel(); 应用绑定(视图模型); }); 这在我的应用程序的第一个页面上非常有效,但是当我转到子页面时,knockoutjs内容不会显示,因为jquer

我知道有很多关于jquery mobile/knockoutjs集成的问题,但是我找不到一个线程来解决我的问题。我有一个主视图模型,其中包含子视图模型,因此我在页面加载时对此进行初始化,因为该事件仅在应用程序加载时触发:

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的应用程序中效果不佳。。。