【问题标题】:Meteor - Syntax Highlighting from Reactive Session Key with Prism.jsMeteor - 使用 Prism.js 从反应式会话键中突出显示语法
【发布时间】:2014-07-26 18:46:22
【问题描述】:

我正在管理面板上显示选定用户的原始 JSON。选定的用户会从 Session 键中被动地更改。我希望每次用户更改时由 Prism.js 突出显示 JSON 语法,但目前 Prism 仅在我的模板被渲染时运行一次,并且在节点被移除并被 Blaze 替换后不会重新运行。每次 Session 键更改时重新突出显示语法的最佳方法是什么?

详细说明:

我从模板助手中获取用户:

Template.admin_user_detail.helpers({
  selectedUser: function(){
    var item = Session.get("adminItem");
    return item && Users.findOne(item);
  }
});

我在模板中显示它的 JSON 如下:

UI.registerHelper("adminItemAsJSON", function(object){
  return JSON.stringify(object, undefined, 4);
});

Prism 然后第一次正确运行以突出显示它,如下所示:

Template.admin_user_detail.rendered = function(){
  var
    self = this,
    code = self.find('code');
  Prism.highlightElement(code);
}

当我运行Session.set("adminItem") 时,Prism 不会再次运行,这对我来说很有意义,因为 Blaze 不会删除并重新渲染模板。那么我需要将Prism.highlightElement() 放在哪里?它是Deps.autorun() 还是其他模式,有人可以用一些示例代码指出方向吗?

其他一切都很好,包括反应性部分。非常感谢。

【问题讨论】:

    标签: meteor


    【解决方案1】:

    你自己回答了:Deps.autorun 解决了你的问题:

    Template.List.rendered = function(){
       var self = this;
       this.deps = Deps.autorun(function(){
    
           // whenever adminItem is changed then this function reruns.
           Session.get("adminItem");
    
           code = self.find('code');
           Prism.highlightElement(code);
       })
    };
    Template.List.destroyed = function(){
       // remember to stop
       this.deps.stop();
    };
    

    【讨论】:

    • 这成功了。我没想过将自动运行放在渲染函数中,回想起来完全有道理。谢谢!
    • 你也可以使用Prism.highlightAll();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多