0

より大きな Rails アプリの backbone.js アプリにあるダッシュボードがあります。ステージングとプロダクション (heroku) では、ダッシュボードは正常に動作します。

ただし、ローカルの Pow 開発環境では、特定のダッシュボードを表示しようとすると、ブラウザー コンソールに次のエラーが表示されます。

Uncaught TypeError: Object #<Object> has no method 'merge' 

それを少し追跡した後、ここに私が思いついたものがあります。エラー メッセージで参照されているマージ メソッドは、レンダリングされた /assets/templates/dashboard/details.js ファイルからのものです。これは、ブラウザが 5 行目の先頭でエラーを呼び出しているコードです: helpers = this.merge...:

(function() {
  this.HandlebarsTemplates || (this.HandlebarsTemplates = {});
  this.HandlebarsTemplates["dashboard/details"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
  this.compilerInfo = [4,'>= 1.0.0'];
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
  var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression;
  buffer += "<p>\n  <b>Name:</b>\n  <span class='editable' data-attribute-name='name'>";
  if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
  else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
  buffer += escapeExpression(stack1)
    + "</span>\n</p>\n<p>\n  <b>Description:</b>\n  <span class='editable' data-attribute-name='description'>";
  if (stack1 = helpers.description) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
  else { stack1 = depth0.description; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
  buffer += escapeExpression(stack1)
    + "</span>\n</p>\n<p>\n  <button class='add_module'>Add module</button>\n</p>\n";
  return buffer;
  });
  return this.HandlebarsTemplates["dashboard/details"];
}).call(this);

これは、ステージングとプロダクションでは問題なく動作しますが、ローカル開発では失敗するため、Rails のプリコンパイルまたはアセット パイプラインのセットアップの問題だと思います。

変更をherokuにプッシュしてテストするのは面倒です。これを解決するための提案は大歓迎です。

4

1 に答える 1

0

これは私のハンドルバーのバージョンが古いことが原因のようです。これを追跡するのを手伝ってくれたソートボットの人たちに感謝します.

https://github.com/wycats/handlebars.js/issues/547

于 2013-10-10T05:45:16.647 に答える