Ember.js Emberjs DefaultTo计算属性
通常,如果未设置实际模型属性,我希望视图默认为特定值。 此占位符文本/值严格来说仅用于查看,因此不应放置在模型imo中 所以,这就是我最终要做的:Ember.js Emberjs DefaultTo计算属性,ember.js,Ember.js,通常,如果未设置实际模型属性,我希望视图默认为特定值。 此占位符文本/值严格来说仅用于查看,因此不应放置在模型imo中 所以,这就是我最终要做的: // Sample 'Model' for illustration purposes only. var myModel = Ember.Object.extend({ title: null, description: null, thumbUrl: null }); /** * Sample View * Render v
// Sample 'Model' for illustration purposes only.
var myModel = Ember.Object.extend({
title: null,
description: null,
thumbUrl: null
});
/**
* Sample View
* Render view properties which are actually
* computed of the actual 'content' properties
*/
var myView = Ember.View.extend({
template: Ember.Handlebars.compile('<p>Title: {{view.title}}</p> <p>Description: {{view.description}}</p> <p>Image: <img {{bindAttr src="view.thumbUrl"}}/></p>'),
title: function () {
return this.get('content.title') || 'Title goes here';// placeholder 'title' text
}.property('content.title'),
description: function () {
return this.get('content.description') || 'This is your description'; // placeholder 'description'
}.property('content.description'),
thumbUrl: function () {
return this.get('content.thumbUrl') || 'http://placehold.it/100x100';
}.property('content.thumbUrl')
});
//示例“模型”仅用于说明。
var myModel=Ember.Object.extend({
标题:空,
description:null,
thumbUrl:null
});
/**
*示例视图
*渲染视图属性实际上是
*计算实际“内容”属性的
*/
var myView=Ember.View.extend({
模板:Ember.handlebar.compile(“标题:{{{view.Title}}说明:{{{view.Description}}图像:”),
标题:功能(){
返回此.get('content.title')| |“title在此处”;//占位符“title”文本
}.property('content.title'),
说明:函数(){
返回此.get('content.description')| |“这是您的描述”;//占位符“description”
}.property('content.description'),
thumbUrl:函数(){
返回此.get('content.thumbUrl')||'http://placehold.it/100x100';
}.property('content.thumbUrl')
});
关于如何减少在所有这些属性(即“title”、“description”和“thumbUrl”)上定义默认值的样板文件,有什么建议吗
我查看了Ember.computed.defaultTo,但未能理解如何使用它。这就是我在行动中的设想:
var myView = Ember.View.extend({
template: Ember.Handlebars.compile('<p>Title: {{view.title}}</p> <p>Description: {{view.description}}</p> <p>Image: <img {{bindAttr src="view.thumbUrl"}}/></p>'),
title: Ember.computed.defaultTo('content.title', 'Title goes here'),
description: Ember.computed.defaultTo('content.description', 'This is your description'),
thumbUrl: Ember.computed.defaultTo('content.thumbUrl', 'http://placehold.it/100x100')
});
var myView=Ember.View.extend({
模板:Ember.handlebar.compile(“标题:{{{view.Title}}说明:{{{view.Description}}图像:”),
title:Ember.computed.defaultTo('content.title','title在这里'),
description:Ember.computed.defaultTo('content.description','This is your description'),
thumbUrl:Ember.computed.defaultTo('content.thumbUrl','http://placehold.it/100x100')
});
那么如何做到这一点呢
如果有更好的方法来做这类事情,我希望在评论中听到他们
另外,指向Ember.computed.defaultTo的指针也会非常有用。这不是
Ember.computed.defaultTo
的意图。Ember.computed.defaultTo接受一个defaultPath
参数。从文档中:
computed属性,其作用类似于标准的getter和setter,但默认为defaultPath
中的值
如果你读这本书,它会给你一些启示
testBoth('Ember.computed.defaultTo', function(get, set) {
var obj = { source: 'original source value' };
Ember.defineProperty(obj, 'copy', Ember.computed.defaultTo('source'));
equal(get(obj, 'copy'), 'original source value');
set(obj, 'copy', 'new copy value');
equal(get(obj, 'source'), 'original source value');
equal(get(obj, 'copy'), 'new copy value');
set(obj, 'source', 'new source value');
equal(get(obj, 'copy'), 'new copy value');
set(obj, 'copy', null);
equal(get(obj, 'copy'), 'new source value');
});
相反,您可以编写自己的助手,如下所示:
Ember.computed.defaultValue = function(dependentKey, defaultValue) {
return Ember.computed(dependentKey, function() {
return Ember.get(this, dependentKey) || defaultValue;
});
};
var myView = Ember.View.extend({
template: Ember.Handlebars.compile('<p>Title: {{view.title}}</p> <p>Description: {{view.description}}</p> <p>Image: <img {{bindAttr src="view.thumbUrl"}}/></p>'),
title: Ember.computed.defaultValue('content.title', 'Title goes here'),
description: Ember.computed.defaultValue('content.description', 'This is your description'),
thumbUrl: Ember.computed.defaultValue('content.thumbUrl', 'http://placehold.it/100x100')
});
我认为这是defaultTo而不是defaultWith,@My bad。那是个打字错误。正在更新我的问题。要提及的是,
defaultTo
已被弃用:
var myView = Ember.View.extend({
template: Ember.Handlebars.compile('<p>Title: {{view.title}}</p> <p>Description: {{view.description}}</p> <p>Image: <img {{bindAttr src="view.thumbUrl"}}/></p>'),
defaultTitle: 'Title goes here',
title: Ember.computed.any('content.title', 'defaultTitle'),
defaultDescription: 'This is your description',
description: Ember.computed.any('content.description', 'defaultDescription'),
defaultThumbUrl: 'http://placehold.it/100x100',
thumbUrl: Ember.computed.any('content.thumbUrl', 'defaultThumbUrl')
});