我对单个页面站点使用Backbone.js,Require.js和Underscore.js。如何知道骨干视图模板何时完成呈现?
我有一个处理的交换进出的子视图的容器图。
对于我的子视图之一,我需要在HTML模板的渲染完毕就知道了。这里的原因:我的子视图(view_subview.html)HTML模板包含iframe和形式:
<iframe name="myIFrame" id="myIFrame"></iframe>
<form action="http://myendpt.com/do" method="get" id="myForm" target="myIFrame">
<input type="hidden" name="param1" value="value1"/>
</form>
通过提交表单,以显示在myendpt.com/do将处理生成内容iframe。
我想弄清楚事情的时机,这样一旦被加载,我可以提交表单。
我的子视图看起来是这样的:
define([
'jQuery',
'Underscore',
'Backbone',
'config',
'text!templates/view_subview.html'
], function ($, _, Backbone, Config, tpl) {
var SubView = Backbone.View.extend({
template: _.template(tpl),
initialize: function() {
},
render: function (eventName) {
$(this.el).html(this.template({config: Config}));
$('#myForm').submit();
return this;
},
});
return SubView;
});
的$( '#myForm的')提交()调用渲染()实际上并没有提交表单。大概这是因为HTML仍在加载并且文档尚未准备好。
如果我移动$(“#myForm的”)。提交()叫出我的容器视图,我可以让它工作,但我想子视图自己的提交表单的。我的容器视图(和其他不相关的子视图)不需要知道或关心在SubView中发生的情况。
了哪些子视图(并且仅在子视图),以检测到HTML满载,这样我可以调用提交的最佳方式?
我发现东西的作品,但我不知道这是最好的答案。我发现Underscore.js的延迟()函数: 呈现:功能(eventName的){$ (this.el)的.html(this.template({配置:配置,字符串:字符串})); (函数(){$('#imsForm')。submit();}); 返回此; }, 根据文档,defer()“延迟调用函数,直到当前调用栈已经清除”。 这似乎是推迟了我足够,以便我可以调用提交,但它会始终做伎俩?有没有更适合我的问题的解决方案? – user1524807 2012-07-14 00:45:34