Marionette.Behaviors

Marionette.Behaviors является вспомогательным классом, который берет на себя задачу присоединить экземпляры ваших поведений к нужным представлениям. Наиболее важной частью этого класса является то, что вы должны переопределить метод класса behaviorsLookup или установить свойство behaviorClass для корректной работы.

Содержание

API

Есть два метода класса, которые вы можете переопределить в классе Behaviors. Остальная часть класса связана с деталями реализации представлений.

Метод behaviorsLookup

Этот метод определяет место, где хранятся классы ваших поведений. Самая простая реализация может выглядит следующим образом.

Marionette.Behaviors.behaviorsLookup = function() {
  return window.Behaviors;
}

По умолчанию поведения ищутся по значению ключа из behaviors-хэша определенного в представлениях.

В данном примере (с использованием реализации метода getBehaviorClass по умолчанию) ваш код будет ожидать, что следующие поведения будут находиться в window.Behaviors.CloseWarn и window.Behaviors.ToolTip

var MyView = Marionette.ItemView.extend({
  behaviors: {
    CloseWarn: {
      message: "you are closing all your data is now gone!"
    },
    
    ToolTip: {
      text: "what a nice mouse you have"
    }
  }
});

Метод getBehaviorClass

Этот метод имеет реализацию по умолчанию, которую можно легко переопределить. Он отвечает за поиск нужного поведения в месте указанном в Behaviors.behaviorsLookup или другом месте.

getBehaviorClass: function(options, key) {
  if (options.behaviorClass) {
    return options.behaviorClass;
  }

  return Behaviors.behaviorsLookup[key];
}

Свойство behaviorClass

Это свойство позволяет указывать конкретный класс поведения (в обход нормальному поиску по ключу). Это полезно, когда поведение является зависимостью (dependency) представления через requirejs. Свойства, переданные этим способом, будут использованы в методе getBehaviorClass.

define(['marionette', 'lib/tooltip'], function(Marionette, Tooltip) {
  var View = Marionette.ItemView.extend({
    behaviors: {
      Tooltip: {
        behaviorClass: Tooltip,
        message: "hello world"
      }
    }
  });
});