我在模型上有一个计算属性,为了计算我需要一个来自控制器的属性(而不是控制模型的属性).我知道有,needs:但这只是在
控制器级别.
我如何从管理模型的控制器以外的控制器获取Ember中的属性?
我正在尝试做一些像[问这个问题] [1]那样的格式,但我没有成功那里的建议.
所以我尝试使用计算属性对模型进行格式化,但为了计算该属性,我需要来自控制器的另一个属性.
任何帮助是极大的赞赏!谢谢!
注意:我正在使用EmberData来管理模型.
编辑:
为了澄清我正在尝试做的事情,我设置了一个
以一般方式显示问题的示例:示例应用程序允许您输入数字,存储它们,
并在列表中显示它们.您还可以输入"转换因子",它不会更改模型数据本身,但会更改模板上的表示.比如说,您输入数字2,保存在模型上,但是当它显示在列表中时,它会使用您之前输入的转换因子进行"格式化",并且计算出的值会显示在模板中.问题是我想要格式化的值存储在不同的控制器上.这是我到目前为止所尝试的:
#1方法:
ArrayController上的计算属性 - needs:在控制器中使用遍历并获取值
- > jsfiddle
我遇到的问题:ArrayController
似乎中断,模板呈现就像根本没有存储的记录一样(注意:该示例使用本地存储,因此创建一些记录并取消注释ArrayController上的计算属性,您将看到它最初按预期工作并显示您输入的记录).
#2方法:
模型本身的计算属性
- > jsfiddle
我遇到的问题:
我不知道如何在模型内部从控制器获取属性
needs:控制器如果有人知道如何解决这个问题或者能指出我正确的方向会很棒.非常感谢您的帮助!谢谢你的时间!
我对Ember Data 1.0.0 Beta 2有以下行为:
回滚数据更改(无需先尝试保存更改):
- 所有数据属性都还原到以前的版本 - 所有标志都处于正确状态
尝试保存后数据的回滚更改,但保存返回422错误: - 没有恢复任何数据属性 - isError标志仍然为true
我希望在第二种情况下,属性也会被设置回先前的状态,并且isError标志被清除.
这是我如何恢复:
cancel: function () {
var author = this.get('model');
author.rollback();
},
Run Code Online (Sandbox Code Playgroud)
这是一个已知的问题 ?
谢谢
通过这篇文章,我了解到我可以find在控制台中使用.但是我在使用它来查找我的litte jsbin Ember.js中的数据时遇到了一些问题,这里有Ember Data和LSAdapter App.
App.container.lookup('store:main').find('org').toArray() 非常感谢您的帮助
我不确定这是否是表达我的要求的正确方法.但是"fork"这个词出现在Ember Data github页面的路线图中.它是EPF的杀手级功能.我想知道我是否可以在Ember Data中做到这一点.
当我们有一个编辑页面并绑定一个模型时,fork功能非常有用.当我们编辑信息时,我不希望更改模型属性,因为如果模型属性也显示在其他位置,它们将自动更改.那不是我想要的.
一个示例是页面左侧的列表和页面右侧特定模型的编辑表单.当我在文本字段中修改角色名称时,左侧的角色名称因数据绑定而更改.

EPF通过"分叉"现有模型并将其设置在子会话中来解决此问题.EPF中的会话与Ember Data中的商店类似.修改分叉模型时,它不会影响主会话中的模型.更新分叉模型后,可以将其合并回主会话,并更新主会话中的相应模型.
我认为Ember Data中的解决方案是创建一个不同的商店并将模型复制到该商店.但它有点复杂.有没有人有更好的解决方案?我搜索stackoverflow和ember讨论论坛,但没有找到答案.
在Ember.js(和Ember-data)中是否有办法将凭据发送到需要基本HTTP身份验证的API ?我可以在这里看到它是如何在JQuery中完成的,但是在Ember中没有看到任何直接的方法.我想也许可以在标题中添加一些东西(参见下面的coffeescript),但没有成功:
App.AuthAdapter = DS.RESTAdapter.extend(
host: 'https://my-api.example.com'
namespace: 'v1'
headers:
"Authorization Basic fooUsername:barPassword"
...
Run Code Online (Sandbox Code Playgroud) 已经有很多关于Ember模态的问题(比如这个和这个).即使是食谱也有一篇文章解释了如何使用模态,但这些都没有提到需要从模式中的服务器进行验证的提交(即已经使用的用户名).
随着食谱,我在我的应用程序模板中有一个命名插座.
{{outlet}}
{{outlet modal}}
Run Code Online (Sandbox Code Playgroud)
并且触发在模态插座内部渲染模板的动作(使用引导程序).
App.ApplicationRoute = Ember.Route.extend
actions:
openModal: (template, model) ->
@controllerFor(template).set('model', model)
@render template, into: 'application', outlet: 'modal'
closeModal: ->
@render '', into: 'application', outlet: 'modal'
Run Code Online (Sandbox Code Playgroud)
显然我是在一个链接中调用这个动作.
<a href="#" {{action openModal "person.edit" model}}>Edit</a>
Run Code Online (Sandbox Code Playgroud)
model当前路线的模型在哪里.
在PesonEditViewI钩子didInsertElement函数中启用bootstrap模态.在这个钩子里面,hidden.bs.modal当点击关闭按钮以清除模态插座时,我也会听到bootstrap触发的事件.
App.PersonEditView = Ember.View.extend
didInsertElement: ->
@$('.modal').modal('show').on 'hidden.bs.modal', =>
@get('controller').send('closeModal')
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何在服务器上验证之后定义一个save关闭模态(使用bootstraps动画)的动作?我看到的事件序列是:1)在控制器上触发,2)如果成功保存,关闭模态(这需要从视图中调用).save@$('.modal').modal('hide')
我不确定Ember专家会在这里提出什么建议,因为看起来好像视图和控制器需要非常密切地沟通.
谢谢!
编辑
在回应edpaez的评论时,我试图解决save视图中返回的承诺.例如,在我的模板中
<button type="button" class="btn btn-primary" {{action "save" …Run Code Online (Sandbox Code Playgroud) 我使用ember js和bootstrap我有一个使用bootstrap的表
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Request Id</th>
<th>Applied By</th>
<th>Leave Type</th>
<th>Leave From</th>
<th>Leave To</th>
<th>Days</th>
<th>Status</th>
<th>Applied date</th>
<th>Applied/Declined date</th>
</tr>
</thead>
<tbody data-link="row" class="rowlink">
{{#each model.pending}}
<tr id="ptable" data-toggle="modal" data-target="#pendingrequestsmodal" style="cursor: pointer">
<td id="eid">{{id}}</td>
<td>{{employee_id}}</td>
<td>{{type_id}}</td>
<td>{{from_date}}</td>
<td>{{to_date}}</td>
<td>{{days}}</td>
<td>{{status}}</td>
<td>{{to_date}}</td>
<td>{{to_date}}</td>
</tr>
{{/each}}
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
现在,当有人点击表格行时,我正在显示bootstrap模式以进行确认
<div id="pendingrequestsmodal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">Confirmation</h4>
</div>
<div class="modal-body">
<button type="button" class="btn btn-default" data-dismiss="modal">Decline</button>
<button type="button" …Run Code Online (Sandbox Code Playgroud) jquery twitter-bootstrap ember.js ember-data bootstrap-modal
目前我有这样的模型设置
App.Specialty = DS.Model.extend({
//specialty_id: attr(),
name: attr()
});
Run Code Online (Sandbox Code Playgroud)
它有一个从json api返回的primaryKey,specialty_id而不是id(ember数据可能预期的).
因此,不要弄乱任何ember数据获取两个对象,其中一个使用id作为任何参数,第二个它获取正确的对象但id为undefined.
如何让ember数据知道它应该搜索specialty_id?
我从控制台得到一个非常不透明的错误消息(在我意义上我没有参考点的不透明),我不完全确定在哪里看,我觉得它可能是库代码中的错误但在发布之前这个在github上我只是仔细检查一下这不是我自己的错.
问题很简单,我打电话this.store.find('player'),希望获得所有玩家的列表,然后以某种列表显示它们,但我甚至没有超过装载部分.数据从服务器中提取并且看起来格式正确,但在route.model方法调用之后似乎失败了.并且错误消息似乎在ember.js库代码中的某处,没有任何指向我自己的代码.
内容类型当然是application/json,并注意该id属性实际上_id.
[
{
"_id":"55405a5102b4ed623c225e87",
"alias":"mikeTest",
"__v":0,
"scans":[],
"createdAt":"2015-04-29T04:13:05.223Z"
}
]
Run Code Online (Sandbox Code Playgroud)
请注意,堆栈跟踪的一部分指向我的源,仅指向Ember源.这让调试很痛苦.
Error while processing route: leader Cannot read property 'match' of undefined TypeError: Cannot read property 'match' of undefined
at Ember.DefaultResolver.extend.podBasedComponentsInSubdir (http://localhost:4200/assets/vendor.js:60138:76)
at http://localhost:4200/assets/vendor.js:60190:34
at Array.exports.default.mixin.Mixin.create.find (http://localhost:4200/assets/vendor.js:39572:30)
at Ember.DefaultResolver.extend.findModuleName (http://localhost:4200/assets/vendor.js:60188:44)
at resolveOther (http://localhost:4200/assets/vendor.js:60051:37)
at superWrapper (http://localhost:4200/assets/vendor.js:28141:20)
at exports.default.EmberObject.default.extend.resolve (http://localhost:4200/assets/vendor.js:15454:35)
at Object.resolve [as resolver] (http://localhost:4200/assets/vendor.js:15217:23)
at resolve (http://localhost:4200/assets/vendor.js:12792:29)
at Object.Registry.resolve (http://localhost:4200/assets/vendor.js:12336:21)
Run Code Online (Sandbox Code Playgroud)
我正在使用最新版本的EmberJS和Ember Data.我有下一个JSON数据:
[{
"id": 6,
"name": "First object",
"vol": 40,
"description": "bla bla bla",
"category": "first"
}, {
"id": 7,
"name": "Second object",
"vol": 17,
"description": "Some description",
"category": "second"
}]
Run Code Online (Sandbox Code Playgroud)
而下一个型号:
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string'),
vol: DS.attr('number'),
description: DS.attr('string'),
category: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)
我不明白如何使Ember数据有效.我怀疑ember数据需要下面的内容:
[{
model-name {
"id": 6,
"name": "First object",
"vol": 40,
"description": "bla bla bla",
"category": "first"
}
}, {
model-name {
"id": 7,
"name": "Second object",
"vol": 17,
"description": "Some description", …Run Code Online (Sandbox Code Playgroud)