1

我有一个名为 Projects 的 Meteor Collections。每个项目都有一个标题和描述。

我想从我的模板助手的描述字段中提取富文本数据。

我正在尝试这样的事情来获取特定项目的描述:

Template.projectItem.helpers({
    description: function () {
        descriptionHTML = Projects.findOne(this._id, {description: {}}); // Get description field for project
        descriptionString = descriptionHTML.text(); // Strip html tags
        return descriptionString; // return description string
    }
});  

但它不起作用。我想在将富文本数据呈现在模板上之前提取它的原因是因为我想在将数据显示在模板上之前从 HTML 格式标记中剥离数据。

1)如何仅获取集合中特定文档的描述字段?我希望能够从 js 文件中访问描述字段。

2)一个我得到描述,我怎样才能轻松剥离html标签?我可以在字符串变量上使用 jQuery 吗?像

description.text();
4

2 回答 2

3

注册模板助手

为您当前的项目注册一个全局助手

Handlebars.registerHelper('project', function() {
    projectId = Session.get('projectId');
    return Projects.findOne( projectId );
});

在您的模板中,您可以使用

{{#with project}}
    {{description}}
{{/with}}

或者

{{project.description}}

更新

1.做一个帮手来清理你的描述。

Handlebars.registerHelper('escapeContent', function(content){
    return _.escape(content);
});

{{escapeContent description}}

2.让助手返回您的转义内容

Template.postItem.description = function() {
    return _.escape(this.description)    
}

3. 或者你可以在transform中做,这部分我用coffeescript写

@Projects = 新 Meteor.Collection '项目'

Projects._transform = (project) ->
    project.description = _.escape project.desscription

而且您不必在模板中执行此操作。

于 2013-09-24T07:26:35.680 回答
0

具体来说,我为解决此问题所做的是将其添加到模板帮助器 js 文件中:

function strip(html)
{
   var tmp = document.createElement("DIV");
   tmp.innerHTML = html;
   return tmp.textContent || tmp.innerText || "";
}

Handlebars.registerHelper('stripContent', function(content){
    return strip(content);
});

然后在我使用的模板html文件中

{{stripContent description}}

像魔术一样工作!他们的关键是使用车把注册助手,这非常有用!

于 2013-09-25T02:32:44.153 回答