Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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/6/codeigniter/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
Javascript 使用手柄或标记输出模型特性_Javascript_Markdown_Ember.js - Fatal编程技术网

Javascript 使用手柄或标记输出模型特性

Javascript 使用手柄或标记输出模型特性,javascript,markdown,ember.js,Javascript,Markdown,Ember.js,我有一个模型,它定义了一个带有标记或html内容的属性 我想知道是使用markdown JS库来输出信息,还是使用Handlebar在视图中生成html输出 如果您有任何建议和示例,我们将不胜感激。使用降价转换器对我很有效 以下是我的查看代码: App.ActivityDetailsView = Em.View.extend( templateName : 'activity-details', classNames : ['details rounded

我有一个模型,它定义了一个带有标记或html内容的属性

我想知道是使用markdown JS库来输出信息,还是使用Handlebar在视图中生成html输出


如果您有任何建议和示例,我们将不胜感激。

使用降价转换器对我很有效

以下是我的查看代码:

App.ActivityDetailsView = Em.View.extend(
  templateName :        'activity-details',
  classNames :          ['details rounded shadow'],
  rawDescriptionBinding:   'App.activityDetailsController.description',

  description: (->
    converter = new Markdown.Converter().makeHtml
    return converter(@rawDescription)
  ).property('rawDescription')

)
以下是模板代码(注意原始html的三重把手{{{}}):


{{{description}}}

这里有一个链接,指向我遇到了一个与使用动态插入的把手模板处理的类似情况:我有一个包含模板的字段,该模板的内容可能绑定到应用程序值

Ember.View.create({
    tagName: 'span',
    classNames: ['dynamic-content'],
    template: Ember.Handlebars.compile(App.preCompileTemplate(template)),
    context: someContextObject
});
App.preCompileTemplate
函数将绑定替换为有效的Handlebar表达式,但您也可以想象在此处使用标记:

App.preCompileTemplate = function(template) {
    return template.replace /{(.*?)}/g, '{{context.$1}}'
}

使用
上下文
对象可以确定绑定到模板中的值的范围。

Ember建议您使用控制器来装饰模型。鉴于此模型,我们希望使用适当的渲染引擎渲染这些博客文章:

[
  { id: 1, isMD: false, md_or_html: "<p>This is HTML.</p>" },
  { id: 2, isMD: true, md_or_html: "*This is MD.*" }
]
我们不能只将
output
属性添加到
PostController
中,并且在不告诉
IndexController
为模型中的每个项目使用
PostController
的情况下让一切正常工作。这是通过在
IndexController
上设置
itemController
来实现的(想想:“每个项目使用哪个控制器”)。这允许我们使用
output
属性分别装饰每个博客文章。我们使用计算属性告诉Ember,
output
的值取决于post
isMD
和post的主体。如果其中任何一个更改,我们希望余烬重新渲染输出


包括关于如何将内省模式扩展到帖子正文以确定它是HTML还是MD的附加注释和详细信息。

太好了,您可能想要接受答案来结束它
[
  { id: 1, isMD: false, md_or_html: "<p>This is HTML.</p>" },
  { id: 2, isMD: true, md_or_html: "*This is MD.*" }
]
App.IndexRoute = Ember.Route.extend({
    model: function() {
        return [
          { id: 1, isMD: false, md_or_html: "<p>This is HTML.</p>" },
          { id: 2, isMD: true, md_or_html: "*This is MD.*" }
        ];
    }
});
<script type="text/x-handlebars" data-template-name="index">
  <ul>
    {{#each}}
      <li>{{output}}</li>
    {{/each}}
  </ul>
</script>
App.IndexController = Ember.ArrayController.extend({
  itemController: 'post'
});

App.PostController = Ember.ObjectController.extend({
  output: function() {
    var result;

    if (this.get('isMD')) {
      var converter = new Markdown.Converter();
      result = converter.makeHtml(this.get('md_or_html'));
    } else {
      result = this.get('md_or_html');
    }

    /*
    IMPORTANT!!! Ember automatically escapes HTML upon insertion.
    To actually embed the result as HTML you will need tell Ember
    that the value is safe to embed as HTML.

    DO NOT RETURN SafeStrings UNLESS THE VALUE IS TRUSTED AND SANITIZED!
    */
    return new Handlebars.SafeString(result);
  }.property('isMD', 'md_or_html')
});