Javascript 在热毛巾/Durandal单页应用程序中加载(激活)视图时调用功能

Javascript 在热毛巾/Durandal单页应用程序中加载(激活)视图时调用功能,javascript,html,single-page-application,durandal,hottowel,Javascript,Html,Single Page Application,Durandal,Hottowel,我正在使用热毛巾SPA项目,我试图在激活视图时调用一个简单的js函数。我看到的是,调用activate函数时,似乎没有加载该项 我还尝试将代码放入由activate调用的初始化函数中,正如其他SO帖子所建议的那样。这似乎没有帮助 那么,在Durandal/Hottown中,在视图加载时调用函数的推荐方法是什么 home.js(视图模型) home.html(视图) 测试 当durandal附加视图模型时,它会在该模型上查找viewAttached方法。我在下面修改了你的代码。它应该可以找到

我正在使用热毛巾SPA项目,我试图在激活视图时调用一个简单的js函数。我看到的是,调用activate函数时,似乎没有加载该项

我还尝试将代码放入由activate调用的初始化函数中,正如其他SO帖子所建议的那样。这似乎没有帮助

那么,在Durandal/Hottown中,在视图加载时调用函数的推荐方法是什么

home.js(视图模型)

home.html(视图)


测试

当durandal附加视图模型时,它会在该模型上查找
viewAttached
方法。我在下面修改了你的代码。它应该可以找到您正在寻找的jQuery元素

define(['services/logger'], function (logger) {
    var vm = {
        activate: activate,
        viewAttached: viewAttached
        title: 'Home'
    };

    return vm;

    function activate() {       
        logger.log('Home View Activated', null, 'home', true);
    }

    function viewAttached(view) {
        $(view).find("#backBtn").hide();
        console.log($(view).find("#myBtn").html()); 
    }
});
查看底部的作文页面,了解更多关于
viewAttached

根据位于的Durandal文档,视图模型有4个回调,它们可以实现以与DOM元素交互,每个回调都传递一个表示视图的
doElement

  • getView
  • beforeBind
  • afterBind
  • viewAttached
它指出
viewAttached
是最常用的钩子。有关每个回调的详细说明,请参阅文档。您可以在列表底部的表格中看到完整的生命周期

定义(['services/logger'],函数(logger){
var vm={
激活:激活,
getView:getView,
beforeBind:beforeBind,
后绑定:后绑定,
viewAttached:viewAttached,
标题:“家”
};
返回虚拟机;
函数activate(){
log('Home View Activated',null,'Home',true);
返回init();
}
函数getView(视图){
}
函数beforeBind(视图){
}
函数后绑定(视图){
}
功能视图已附加(视图){
$(“#backBtn”).hide();
console.log($(“#myBtn”).html();//返回未定义的
}
});

根据位于的最新Durandal文档,viewAttached重命名为attached,因此您可以使用Durandal 2编码如下:

define(['services/logger'], function (logger) {
var vm = {
    activate: activate,
    attached: attached
    title: 'Home'
};

return vm;

function activate() {       
    logger.log('Home View Activated', null, 'home', true);
}

function attached(view, parent) {
    $(view).find("#backBtn").hide();
    console.log($(view).find("#myBtn").html()); 
}
});

还可以查看docs页面。谢谢你们两个!由于Durandal的变化,这个答案不再正确。viewAttached函数不再被调用。此外,指向文档的链接也已断开。请更新您的答案。如文档中所述,
viewsattached
回调挂钩已替换为
attached
。这是durandal 2.0的一个不错的更新答案,正如您正确指出的,其他人都适用于2.0之前的版本
define(['services/logger'], function (logger) {
    var vm = {
        activate: activate,
        viewAttached: viewAttached
        title: 'Home'
    };

    return vm;

    function activate() {       
        logger.log('Home View Activated', null, 'home', true);
    }

    function viewAttached(view) {
        $(view).find("#backBtn").hide();
        console.log($(view).find("#myBtn").html()); 
    }
});
define(['services/logger'], function (logger) {
var vm = {
    activate: activate,
    attached: attached
    title: 'Home'
};

return vm;

function activate() {       
    logger.log('Home View Activated', null, 'home', true);
}

function attached(view, parent) {
    $(view).find("#backBtn").hide();
    console.log($(view).find("#myBtn").html()); 
}
});