我正在使用 mvc4 的 Durandal 入门模板。我设置了以下简单视图:
<section>
<h2 data-bind="html: displayName"></h2>
<h3 data-bind="html: posts"></h3>
<button data-bind="click: getrss">Get Posts</button>
<div id="rsstestid" ></div>
</section>
和视图模型:
define(function (require) {
var http = require('durandal/http'),
app = require('durandal/app');
return {
displayName: 'This is my RssTest',
posts: ko.observable(),
activate: function () {
return;
},
getrss: function () {
$('#rsstestid').rssfeed('http://feeds.reuters.com/reuters/oddlyEnoughNews');
return;
}
};
});
正如您所看到的,它只是使用 zRssReader 插件在单击“获取帖子”按钮时将帖子加载到 div 中。一切正常,显示名称已填充,帖子按预期显示。
我遇到麻烦的是当我尝试消除该按钮并尝试在创建时加载帖子时。如果我将插件调用放在激活函数中,则不会得到任何结果。我认为这是因为视图未完全加载,因此该元素不存在。我有两个问题:
- 如何延迟插件调用的执行,直到视图完全组合?
- 更好的是,如何将插件结果加载到可观察的 posts 中,而不是使用查询选择器?我尝试了很多组合但没有成功
感谢您的帮助。
编辑** 以下答案适用于 durandal 1.2。在杜兰达尔2.0中viewAttached
已更改为attached
直接从 durandaljs.com 复制粘贴
“每当 Durandal 编写时,它还会检查您的模型中是否存在名为viewAttached
。如果存在,它将调用该函数并将绑定视图作为参数传递。这允许控制器或呈现器在注入其父级后的某个时间点直接访问其绑定的 dom 子树。
注意:如果您设置了cacheViews:true
then viewAttached
仅在首次显示视图时(在初始绑定时)调用,因为从技术上讲,视图仅附加一次。如果您想覆盖此行为,请设置alwaysAttachView:true
关于您的作文绑定。”
--引自该网站 http://durandaljs.com/documentation/Composition/
有很多方法可以做到这一点,但这里只是一种快速但肮脏的方法:
<section>
<h2 data-bind="html: displayName"></h2>
<h3 data-bind="html: posts"></h3>
<button data-bind="click: getRss">Get Posts</button>
<div id="rsstestid"></div>
</section>
和代码:
define(function (require) {
var http = require('durandal/http'),
app = require('durandal/app');
var $rsstest;
return {
displayName: 'This is my RssTest',
posts: ko.observable(),
viewAttached: function(view) {
$rssTest = $(view).find('#rsstestid');
},
getRss: function() {
$rssTest.rssfeed('http://feeds.reuters.com/reuters/oddlyEnoughNews');
}
};
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)