虽然Ember快凉了(此句划掉),但是遇到问题还是要解决的。
按照书上的写法复制了一遍,但是运行的时候控制台报错“Ember.Handlebars.SafeString is not a function”。查阅文档和Github上的issue可以看到:
Suggest using
Ember.String.htmlSafe
overEmber.Handlebars.SafeString
:// deprecated new Ember.Handlebars.SafeString(someString); // Non-deprecated Ember.String.htmlSafe(someString);
For a few reasons:
- The
SafeString
API is a tad bit “trolly” (many questions arise from it “not working” due to forgetting to usenew
).- The
Ember.Handlebars
namespace is basically legacy and going away
也就是说,这个方法已经废弃了;按照上文所述,换成Ember.String.htmlSafe即可解决:
import Ember from 'ember';
return Ember.String.htmlSafe(
`<span class="text-primary">${formatted}</span>`
);
此外,还有一种写法,看起来更新一点(其实就是2.x和3.x的语法区别):
import {htmlSafe} from '@ember/template';
return htmlSafe(
`<span class="text-primary">${formatted}</span>`
);
至于原因?稍微考证一下,这是2016年5月27日发布的消息。我们都知道,废弃离移除肯定还有一段时间,而这本书出版于2016年7月,写作时间只会更早,所以当时还有这种遗留代码也很正常。而软件也不可能无限制地向下兼容,这样会导致过于冗余,所以抛弃一部分废弃的API就很正常了。只是苦了我们这些刚起步的人啊……
具体的还可以参考Ember的官方API。