- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 Ember 2.8 应用程序中,我正在服务中建立 Websocket 连接。当用户登录时,连接 URL 会发生变化(然后将用户身份验证 token 作为查询参数包含在内)。
当前的用户服务很简单:
CurrentUserService = Ember.Service.extend(
name: "current-user"
user: null
load: ->
// Do some stuff
@set("user", user)
)
ActionCableService = Ember.Service.extend(
name: "action-cable"
cable: service()
currentUser: service()
testObs: Ember.observer("currentUser", ->
console.log "currentUser changed, #{ @get("currentUser.user") }"
)
consumer: Ember.computed("currentUser.user", ->
consumerUrl = "ws://localhost:10000/cable"
if @get("currentUser").user?
consumerUrl += "?token=#{ @get("currentUser.user.authToken") }"
console.log(consumerUrl)
return @get("cable").createConsumer(consumerUrl)
)
)
consumer
没有更新,我的测试观察者也没有。
currentUser.user
(发生这种情况,我可以在我的页面上看到用户名)consumer
计算属性通知 currentUser.user
更改并连接到私有(private) consumerUrl(不会发生)最佳答案
Computed properties, by default, observe any changes made to the properties they depend on, and are dynamically updated when they're called.
除非您正在调用或调用该计算属性,否则它不会执行您想要的代码。
Observers
,另一方面,当他们正在观察的属性发生变化时,无需调用即可使用react。但是它们经常被过度使用,并且由于它们的同步特性很容易引入错误。
您可以将观察者和计算属性重构为直接调用的辅助函数。这也使它们更容易进行单元测试。
在您的 Controller ,您可以处理登录的初始操作,如下所示:
currentUser: Ember.inject.service(),
actions: {
login() {
this.auth({ username: 'Mary' });
},
},
auth(data) {
// Send data to server for authentication...
// ...upon response, handle the following within the promise's `then`
// method, failures caught within `catch`, etc. But for purposes of
// demonstration, just mocking this for now...
const response = { username: 'Mary', authToken: 'xyz', };
this.get('currentUser').setConsumer(response);
},
action-cable
上调用辅助函数服务:
actionCable: Ember.inject.service(),
authToken: null,
username: null,
setConsumer(response) {
this.set('authToken', response.authToken);
this.set('username', response.username);
this.get('actionCable').setConsumer();
},
currentService
读取属性, 设置
consumerUrl
,并调用
电缆创建消费者的服务:
cable: Ember.inject.service(),
currentUser: Ember.inject.service(),
setConsumer() {
var consumerUrl = "ws://localhost:10000/cable";
if (this.get("currentUser.username") !== null) {
consumerUrl += "?token=" + (this.get("currentUser.authToken"));
}
console.log("ACTION CABLE SERVICE, Consumer URL: ", consumerUrl);
this.get("cable").createConsumer(consumerUrl);
}
关于ember.js - Ember 计算属性取决于未更新的服务属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40815199/
我正在尝试将 ember-models 链接到 ember-table,以从服务器提取分页记录,并在向下滚动时将它们添加到表中。 我可以通过请求我的 api url 和页码来让它工作,就像 http:
我有一个应用程序,它使用 ember-data 来持久化数据和 StateManager 来驱动其全局状态。由于加载数据是异步的,我想知道如何捕获表示所有数据都已加载的事件。 准确地说,我有一个名为“
我有一个简单的 Ember 应用程序,其中有一个输入框、两个选择框和一个按钮。我可以在“doSearch”方法中访问输入框的值,但不能访问选择框的值。 到目前为止,我没有尝试任何工作 - 我注释掉了我
我使用 Ember-CLI 来构建我的 ember 应用程序,但我不想使用 Ember Data。 默认情况下,当你输入这个命令:ember generate model Person 时,ember
我按照 Ember CLI 主页的说明创建了我的第一个 Ember CLI 插件。该插件运行良好,并且已经在 Github 上获得了几颗星:https://github.com/lolmaus/emb
我在这里看到的以前的问题似乎都没有涵盖何时使用 Ember 计算属性与 Ember Observer 的主题。我知道计算属性使用以前的属性来帮助生成新属性并在运行循环中更新。 Person = Emb
我一直在 git 分支上切换到 1.13.2 版本的 ember,现在我想在返回另一个分支时回到 1.11.1。 我一直在运行npm install和 bower install没有失败。 但是当我运
我有一个使用 ember-cli 构建的 Ember 应用程序我正在使用 ember-qunit 编写我的测试使用 testem 测试适配器并在浏览器中运行它们按照 ember-cli 中的说明文档。
项目设置: Ember:2.0.0 Ember 数据:2.0.0 Ember-cli:1.13.8 我创建了一个转换:转换/isodate.js import DS from 'ember-data'
假设我有一个具有 2 个属性的组件:我如何能够基于 localID 属性和 Ember.compulated.filterBy 宏创建计算属性? localID: 2, data: [ { i
我刚刚创建了一个新的 Ember-CLI app (v0.1.12),并注意到 Ember 的引用版本是 v1.8.1 (bower.json)。我想要 recently released 1.10我
使用最新的 Ember (3.2)、ember-cli-mirage 0.4.7、ember-cli-qunit 4.3.2、ember-qunit 3.4.1 我正在使用 ember-cli-mir
我是一名 ember 菜鸟,正在阅读 ember-cli 101 这本书。迄今为止,我一直在 ember-cli 网站 here 上使用升级工作流程。 。 在终端中使用 ember-cli 帮助时,我
如何测试我的组件,将 ember-data 模型作为 props 传递给它? 例如: {{#queue/review/moderatable-text model=activity property=
Ember 对象和 Ember Data 中的对象有什么区别?我知道当服务器上有一些数据时我应该使用 Ember Data 模型,但是我应该何时何地使用它们中的任何一个? 最佳答案 注意:这很长,有偏
执行ember -v仅显示ember cli版本。 如何查看 ember.js 版本和 ember 数据版本? 最佳答案 ember.js 和 ember-data 的版本由应用的依赖项决定。 Bow
我正在尝试在 Ember.RSVP.all 内执行 promise App.Foo = Ember.Object.create({ bar: function() { var
访问 ember 对象属性的首选方法是什么?我经常看到 .get() 方法被使用,但想知道为什么人们不只是使用点表示法。例如在 Advice in the Use of Ember Trek 先生写道
我知道 Ember 有一个记录器,但我想创建自己的用于学习目的。我有一个名为 logger 的服务,我希望能够在任何地方使用这个服务。将此服务注入(inject)到组件、 Controller 等中没
我刚刚关注了 ember-cli 主页上的“入门”帖子。 我安装了 ember 0.1.2、bower、phantomjs 等。 但是,我创建了我的应用程序,当我运行“ember server”时,它
我是一名优秀的程序员,十分优秀!