从路线访问控制器有什么万无一失的方法吗?
<a href="#" class="btn" {{action "someAction" user}}>add</a>
App.ApplicationRoute = Ember.Route.extend
events:
someAction: (user) ->
console.log 'give me name from currentUser controller'
Run Code Online (Sandbox Code Playgroud)
someAction非常通用,我认为ApplicationRoute是最好的选择.
有人告诉我,为了不一直提出请求,可以使用.all()方法加载存储在商店中的数据.但是Ember如何处理缓存?我有一些问题.
你如何控制缓存?什么时候使用.find()和.all().你使用.find()然后.all()吗?多长时间?
.all()是否有一些到期日期,以便在一段时间后它可以发出新的请求?或者它使用本地存储,以便我必须手动清除它?
假设我有一些数据,我想每周只刷一次?我该怎么办呢?现在,每次我进入或重新访问同一路线时,都会发出新请求.我怎么能避免这个?
这是一个典型的Handlebars助手:
Ember.Handlebars.helper 'myHelper', (value, options) ->
...
Run Code Online (Sandbox Code Playgroud)
根据这个protip,你可以将哈希传递给Handlebars助手.我查看了源代码,发现它提供了两者options.hash
和options.data
.我有点困惑,因为这不会按预期工作:
{{#with controllers.currentCardCategory}}
{{#each property in cardProperties}}
<td class="td">{{cardProperty this property=property.symbol}}</td>
{{/each}}
{{/with}}
Run Code Online (Sandbox Code Playgroud)
this
是目前的Card
记录.在这里,我得到了property.symbol
字符串
但这有效:
{{#with controllers.currentCardCategory}}
{{#each property in cardProperties}}
<td class="td">{{cardProperty this property.symbol}}</td>
{{/each}}
{{/with}}
Run Code Online (Sandbox Code Playgroud)
并且价值可以通过options
.
但现在我不能这样做:
{{#with controllers.currentCardCategory}}
{{#each property in cardProperties}}
<td class="td">{{cardProperty this property.symbol anotherParam yetAnotherParam}}</td>
{{/each}}
{{/with}}
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何传递等参数,以辅助和什么之间的区别options.hash
,并options.data
在助手?
Ember Objects和Ember Data之间有什么区别?我知道当服务器上有一些数据时我应该使用Ember Data模型,但是我应该在何时何地使用它们?
我无法赶上普通车把和修改过的Ember Handlebars帮手所做的所有改变.如果我没记错的话,您可以使用以下方法注册帮助程序
这对我来说太过分了.你能解释一下这有什么区别吗?
我开始在一个地方导入共享的东西,比如变量和mixin - css清单文件.现在我正在使用文件的直接路径导入一些Compass mixins.
我的问题是,如果使用@import 'compass'
将整个框架注入application.css,还是通过查看sass文件中的引用然后只导入所需的mixins来完成?
我不想包括一切.
拥有以下用户模型:
Sks.User = DS.Model.extend
firstName: DS.attr("string")
lastName: DS.attr("string")
Run Code Online (Sandbox Code Playgroud)
应该在哪里声明'fullName'计算属性?
fullName: Ember.computed(->
firstName = @get("firstName")
lastName = @get("lastName")
firstName = "" if firstName is `undefined`
lastName = "" if lastName is `undefined`
lastName + " " + firstName
).property("firstName", "lastName")
Run Code Online (Sandbox Code Playgroud)
它应该在'UsersController'中还是直接在模型中?Ember文档说只在会话中使用的字段应该写在控制器中.但问题是我无法访问索引模板中的'fullName':
Sks.IndexController = Ember.Controller.extend
needs: ['users']
Run Code Online (Sandbox Code Playgroud)
在这里,'fullName'无法访问(在控制器中声明)
{{#each user in controllers.users}}
<li>{{user.fullName}}</li>
{{/each}}
Run Code Online (Sandbox Code Playgroud)
但它是在模型中的时候.
# here is CreditCards controller context
{{#with controllers.currentCardCategory}}
{{#each property in cardProperties}}
{{#is property.symbol 'your_savings'}}
<td class="td">{{yourSavings}}</td>
{{else}}
<td class="td">{{cardProperty this property.symbol}}</td>
{{/is}}
{{/each}}
{{/with}}
Run Code Online (Sandbox Code Playgroud)
我动态创建表.所有内容都来自于ArrayController
一个来自控制器的计算属性.symbol' field is underscored like
annual_fee'并且属于CreditCardProperty
.每种卡类别都有不同的卡片属性.只有两个类别具有属性(类别具有许多卡属性),并且一个记录的computed
字段设置为true
.这意味着模板应该查找相应的控制器.
因为symbol
(例如age_to_apply)与一个CreditCard字段(ageToApply
)有关,我所能想到的就是使用cardProperty
在上下文中接受当前卡的帮助器this
并解析property.symbol
,例如:
camelizedProperty = categoryProperty.camelize()
card.get 'camelizedProperty'
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想没有帮助程序,并以某种方式使用它:
# *** {{property.symbol}} should look up this context
# and become e.g {{annual_fee}} or {{annualFee}} - is it possible?
{{#with controllers.currentCardCategory}}
{{#each property …
Run Code Online (Sandbox Code Playgroud) 我们正在开发的应用程序中的视图已经在Handlebars/Emblem中编写,数据已经从模型中获取.
我想弄清楚在Ember中内联/现场的最佳方法是什么.问题:当没有点击任何内容时,数据只是一个文本.当您根据文本类型(日期,纯文本,项目列表)单击文本时,将替换相应的输入字段(日期字段,文本字段或选择),您可以对其进行编辑.
你有过这个问题的经验吗?如果是这样,请分享您的想法!