1

「no method 'result' backbone.marionette.js:402 エラー」が表示されます。ここにトレースがあります:

Uncaught TypeError: Object function (obj) { return new wrapper(obj); } has no method 'result' backbone.marionette.js:402

Marionette.CollectionView.Marionette.View.extend.buildItemView backbone.marionette.js:402
Marionette.CollectionView.Marionette.View.extend.addItemView backbone.marionette.js:360
Marionette.CollectionView.Marionette.View.extend.showCollection backbone.marionette.js:314

...

backbone.marionette.js で:

// Build an `itemView` for every model in the collection. 
buildItemView: function(item, ItemView){
var itemViewOptions = _.result(this, "itemViewOptions");
    ***Uncaught TypeError: Object function (obj) { return new wrapper(obj); } has no method 'result' ***
var options = _.extend({model: item}, itemViewOptions);
var view = new ItemView(options);
return view;
backbone. },

私の呼び出しコード:

MyApp.module("CatalogsApp.Pasteboard", function(Pasteboard, MyApp, Backbone, Marionette, $, _) {
    var CatalogListView, CatalogView;
    CatalogView = Marionette.ItemView.extend({
      tagName: "div",
      className: "catalog-cell",
      template: "catalogs/catalog"
    });
    CatalogListView = Marionette.CollectionView.extend({
      tagName: "div",
      className: "paste-board",
      itemView: catalogView
    });
    Pasteboard.showCatalogs = function(catalogList) {
      var catalogListView;
      catalogListView = new CatalogListView({
        collection: catalogList
      });
      return MyApp.layout.main.show(catalogListView);
    };
  });

ここでタイプエラーを引き起こしている可能性のある問題について誰かが何か手がかりを持っている場合-考えを得るのに最適です。私はほとんどそこにいます。catalogList コレクションは問題ないようです - サーバーから取り込まれます。これを解読するのは難しいかもしれませんが、誰かが解決にアプローチする方法について何らかの考えを持っているかもしれません。

4

2 に答える 2

2

最新の underscore.js バージョンがあることを確認してください。「結果」機能は v1.3.3 で追加されました

于 2012-06-28T23:59:51.887 に答える
0

これを行うと、クラス定義が上書きされますvar catalogListView;

規則では、次のように、クラス定義の名前を大文字にします。

MyApp.module("CatalogsApp.Pasteboard", function(Pasteboard, MyApp, Backbone, Marionette, $, _) {
    var CatalogListView, CatalogView;
    CatalogView = Marionette.ItemView.extend({
      tagName: "div",
      className: "catalog-cell",
      template: "catalogs/catalog"
    });
    CatalogListView = Marionette.CollectionView.extend({
      tagName: "div",
      className: "paste-board",
      itemView: CatalogView
    });
    Pasteboard.showCatalogs = function(catalogList) {
      var catalogListView;
      catalogListView = new CatalogListView({
        collection: catalogList
      });
      return MyApp.layout.main.show(catalogListView);
    };
  });
于 2012-06-28T23:16:48.440 に答える