在下面的代码中,我需要在我从Gmaps导航器上调用valuea后才渲染视图。 直到我有Latitude amd Longitude,我才能渲染视图。 在这里跟随一些答案我坚持错误
对象[object global]没有方法'afterRender 谢谢你的任何建议。
initialize: function() {
$.when(this.beforeRender).then(function(){
this.afterRender();
});
},
beforeRender: function () {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(this.onSuccessUpdatePos,
this.onFailUpdatePos);
} else {navigator.geolocation.getCurrentPosition(this.onSuccessUpdatePos,
this.onFailUpdatePos);
}
},
afterRender: function () {
this.render();
},
更新:我按照我的说法做了,似乎序列BeforeRender-> render-> afterRender受到尊重。 我还在函数Initialize()中添加了所有初始化逻辑。 问题是将序列中的函数放在一起似乎不能确保一旦获得结果就启动函数render()。
我也尝试了
$.when(this.beforeRender).then(that.render);
正如我所建议但仍然一直给我错误。似乎beforeRender没有推出。不断向我显示的错误是
未捕获的SyntaxError:意外的令牌u
我认为这是因为sessionStorage& localStorage和这些在启动渲染功能之前未填充。 是否有一种等待返回这些结果的有效方法?
答案 0 :(得分:2)
我认为你遵循了一些教程,因为在Backbone核心中不存在beforeRender和afterRender。但是,它们通常由需要在渲染例程之前和之后触发事件的人实现。
此外,Backbone将View类的render函数留空,因此您可以在需要时实现(甚至调用它)。
作为旁注,将render()调用到initialize()函数中通常并不好,因为在初始化之后,通常需要对何时以及如何渲染视图有更多的控制。
那就是说,我建议:
如果你确实需要(可能是为了进一步开发你的代码)之前的和之后的回调,你可以使用Underscore(可用,因为它是一个依赖项)“wrap “功能。 这种方法包括:
initialize: function()
this.render = _.wrap(this.render, function(render) {
this.beforeRender();
render();
this.afterRender();
});
},
render: function() {},
beforeRender: function() {},
afterRender: function() {}
考虑到这一点,我会选择(记得在View类上指定 onFailUpdatePos ):
initialize: function() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(this.render, this.onFailUpdatePos);
} else {
navigator.geolocation.getCurrentPosition(this.render, this.onFailUpdatePos);
}
}
答案 1 :(得分:0)
此为out of context inside then
请尝试此操作..在调用之前保存 this 的引用。
initialize: function() {
var thisView = this;
$.when(this.beforeRender).then(function(){
thisView.afterRender();
});
},