gpt4 book ai didi

javascript - 引发 Backbone.js View 事件

转载 作者:行者123 更新时间:2023-12-02 23:26:42 26 4
gpt4 key购买 nike

我想找到一种方法来引发backbone.js“事件”,而无需在模型或dom中进行任何更改。

例如,我正在异步加载 Facebook SDK。我订阅了 auth.login 事件,并且想向我的 View 发送一条消息,表明用户已登录,以便它可以适本地重新呈现自身。

我的观点与此类似:

window.CreateItemView = Backbone.View.extend({
el: $('#content'),
initialize: function() {
this.render();
},
render: function() {
// do something
return this;
},
setSignedRequest: function(signedRequest) {
//do something with signedRequest
}
});

在我的 Facebook 代码中,我这样做:

  FB.Event.subscribe('auth.login', function(response){
if (response.status === 'connected') {
var uid = response.authResponse.userID;
var accessToken = response.authResponse.accessToken;
window.signedRequest = response.authResponse.signedRequest;

if (window.view && window.view.setSignedRequest) {
window.view.setSignedRequest(window.signedRequest);
}
}
});

但是,虽然 window.view 存在,但它看不到 setSignedRequest 方法。我已确保我的脚本以正确的顺序加载。奇怪的是,我在不同的页面上有相同的代码,尽管是不同的 View 对象,并且工作正常。我没有看到任何差异可以解释这一点。

更好的解决方案是引发某种事件并让 View 监听它。但是,我不想在模型上使用更改事件,因为signedRequest 不应该是模型的属性。有更好的方法来实现这一点吗?

最佳答案

Backbone.View 通过 Backbone.Events 进行了扩展,这意味着您可以轻松触发自定义事件并传递您想要的任何数据

var View = Backbone.View.extend({

initialize: function() {

this.on('customEvent', this.doSomething, this);
}

doSomething: function(someData) {

// this!
}
});

var view = new View();

view.trigger('customEvent', "someDataHere");

虽然我不知道为什么你看不到 View 上的方法 - 它应该可以工作 - 你是否 100% 确定你正在正确实例化 View ? window.viewCreateItemView 的实例?

关于javascript - 引发 Backbone.js View 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9350726/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com