javascript - Backbone.js 在获取返回值后呈现 View

标签 javascript jquery backbone.js jquery-deferred .when

在下面的代码中,只有在我从 Gmaps 导航器上的调用中获得 valuea 后,我才需要渲染 View 。 在我拥有 Latitude amd Longitude 之前,我无法渲染 View 。 按照这里的一些答案我被错误困住了

对象 [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 没有启动。不断向我显示的错误是

未捕获的语法错误:意外的标记 u

我认为发生这种情况是因为 sessionStorage 和 localStorage 并且在启动渲染功能之前没有填充它们。 有没有一种有效的方法来等待这些结果被返回?

最佳答案

我认为您遵循了一些教程,因为 beforeRender 和 afterRender 都不存在于 Backbone 核心中。但是,它们通常由需要在渲染例程前后触发事件的人实现。

此外,Backbone 将 View 类的渲染函数留空,因此您可以在需要时自行实现(甚至调用)。

作为旁注,将 render() 直接调用到 initialize() 函数中通常不好,因为在初始化 View 后,您通常需要更好地控制何时以及如何呈现 View 。

也就是说,我建议:

  • 将所有初始化逻辑(比如导航器检查)移到 initialize() 中;
  • 在 View 外调用 render()(在调用新的 ViewName() 之后)

如果你真的需要(可能是为了进一步开发你的代码)beforeafter 回调,你可以使用 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);
    }
}

关于javascript - Backbone.js 在获取返回值后呈现 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16640195/

相关文章:

jquery - 使用 jQuery :gt() with $(this)

javascript - 我的 Backbone.View 不会渲染

javascript - 在 Json 调用中使用数组变量(索引)

javascript - 从 RxJs 5 迁移到 6 : switchMap and Interval broken

javascript - 每次运行函数时增加值

php - jQuery 昨天工作了。不再

javascript - 尝试在 Chrome 扩展选项页面中显示警报,但收到 "Cannot set property ' innerHTML' of undefined”

JQuery 对话框 : Show Message in Dialog Box After Selecting Confirm Option

backbone.js - Backbone : A list of views inside a view

javascript - 在 Backbone.js 中销毁或删除 View