如何绑定到 Emberjs 中的全局变量

Posted

技术标签:

【中文标题】如何绑定到 Emberjs 中的全局变量【英文标题】:How to bind to a global variable in Emberjs 【发布时间】:2014-04-11 10:59:14 【问题描述】:

以下似乎不起作用:

//Global variable needed for Websocket methods
var dispatcher = new WebSocketRails(document.location.host+'/websocket')
//dispatcher.state = 'connected' or 'disconnected'. This automatically updates
//  its value if connected or not. I want to bind this value to a property below.

App.MessagesController = Ember.ArrayController.extend(

  isConnectedBinding: 'dispatcher.state', //also tried dispatcher.state w/o quotes, didn't work

  isConnected: (function() 
    alert('!!!!'); //This alert never pops up
    if (this.isConnectedBinding === 'connected') 
      return true;
     else 
      return false;
    
  ).property('isConnectedBinding')
);

我在前端使用 Emberjs 1.5.1 的 Ruby on Rails 服务器上使用 Websocket-rails gem。

我测试了dispatcher.state 确实改变了它的值(比如我暂时关闭了我的本地服务器:'connected' -> 'disconnected')。所以我猜它必须沿着 Emberjs 绑定。我还发现使用 Chrome 控制台时,App.__container__.lookup('controller:messages').isConnected 的值始终是 undefined,而从来不是 true 也不是 false

任何帮助将不胜感激。

【问题讨论】:

你找到解决方案了吗 【参考方案1】:

只需从isConnectedBinding: 'dispatcher.state' 中删除绑定和单引号,因为调度程序是一个全局变量。参考这个jsbin,你会有所了解的。

【讨论】:

不工作。在 Chrome 控制台上尝试过:在我暂时关闭服务器后,dispatcher.state 从“已连接”变为“已断开”,我希望 App.__container__.lookup('controller:messages').isConnected 也可以更改为“已断开”,但事实并非如此。它仍然是“连接的”。如果我没记错的话,这是因为 isConnectedBinding 是一个绑定,而 isConnected: dispatcher.state 将被视为一个普通属性,其值 = dispatcher.state 因此将始终是“已连接”值。见(this)(我编辑了你的链接)

以上是关于如何绑定到 Emberjs 中的全局变量的主要内容,如果未能解决你的问题,请参考以下文章

R CMD检查中的全局变量注释没有可见的绑定

用python的Tkinter中的按钮,绑定的事件如何更改全局变量的问题

利用DMZ对象保护全局变量

dplyr 。和 _no 对全局变量 '.' 的可见绑定 _ 包检查中的注意事项

R CMD 检查:全局变量没有可见绑定(使用包中的数据/数据集时)

父进程全局变量如何复制到python多处理中的子进程