在热毛巾/Durandal单页应用程序中查看加载(激活)的呼叫功能
Call Function on View Loaded (Activate) in Hot Towel/Durandal Single Page App
我正在使用热毛巾SPA项目,当视图被激活时,我试图调用一个简单的js函数。我看到的是,当激活函数被调用时,项目似乎没有被加载。
我也试过把代码在一个初始化函数调用激活建议在其他SO帖子。这似乎没有帮助。
那么在Durandal/HotTowel中,在视图加载时调用函数的推荐方法是什么?
home.js(视图模型)
define(['services/logger'], function (logger) {
var vm = {
activate: activate,
title: 'Home'
};
return vm;
function activate() {
logger.log('Home View Activated', null, 'home', true);
return init();
}
function init() {
$("#backBtn").hide();
console.log($("#myBtn").html()); // returns undefined
}
});
home(视图)
<section>
<div id="myBtn">test</div>
</section>
根据最新的Durandal文档在与DOM交互时,viewatattached重命名为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());
}
});
当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());
}
});
查看底部的Composition页面,了解更多关于viewAttached
的信息。http://durandaljs.com/documentation/Using-Composition.html
根据Durandal文档在与DOM交互,视图模型有4个回调,他们可以实现为了与DOM元素交互,每个被传递一个DOMElement
表示视图:
-
getView
-
beforeBind
-
afterBind
-
viewAttached
说明viewAttached
是最常用的钩子。有关每个回调的更详细描述,请参阅文档。你可以在钩子生命周期回调底部的表格中看到完整的生命周期。
define(['services/logger'], function (logger) {
var vm = {
activate: activate,
getView: getView,
beforeBind: beforeBind,
afterBind: afterBind,
viewAttached: viewAttached,
title: 'Home'
};
return vm;
function activate() {
logger.log('Home View Activated', null, 'home', true);
return init();
}
function getView(view) {
}
function beforeBind(view) {
}
function afterBind(view) {
}
function viewAttached(view) {
$("#backBtn").hide();
console.log($("#myBtn").html()); // returns undefined
}
});
相关文章:
- 在BoilerplateJS浏览器加载所有脚本(在其他模块中),而不考虑激活的模块
- 关闭在加载时激活,而不是复选框更改
- 在页面加载时激活jQuery/Javascript函数
- 在页面加载时激活jQuery img和文本操作
- 如何激活 bootstrap.tagsinput 用于 DOM 加载后添加的输入
- 如何在 ajax 加载表单上激活 django form.media javascript
- skrollr.js加载后立即激活相对模式
- 加载另一个相同页面时,使用新数据激活第一个网页
- JS 函数在页面重新加载时激活警报
- 如何激活加载图标〔iPad〕
- Javascript-在页面加载时激活onsubmit
- 如何仅在激活颜色框弹出窗口时加载内容
- Ajax延迟加载,手风琴按钮未激活
- 如何激活另一个选项卡后重新加载相同的php文件点击一个按钮
- 激活:当页面加载Javascript时聚焦
- 在热毛巾/Durandal单页应用程序中查看加载(激活)的呼叫功能
- JQuery手风琴在文档加载时激活,而不是在点击时激活
- JQuery加载(url)最初不工作,间隔后激活
- 如何在从外部文件加载时激活jquery函数
- 如何在使用选项卡集加载应用程序时使选项卡激活