Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js Emberjs DefaultTo计算属性_Ember.js - Fatal编程技术网

Ember.js Emberjs DefaultTo计算属性

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

通常,如果未设置实际模型属性,我希望视图默认为特定值。 此占位符文本/值严格来说仅用于查看,因此不应放置在模型imo中

所以,这就是我最终要做的:

// 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')
});