2013-11-07 3 views
2

После прочтения Marionette.Commands Мне очень любопытно найти разницу между нормальными функциями и Marionette.Commands.Каковы различия между обычными функциями и Marionette.Commands

Если вы определяете какую-либо функцию, вы можете вызвать эту функцию там, где хотите.

нормальная функция:

var normalFun=function(){alert("Normal Function")}; 

таким же образом Marionette.commands также работает как следующим образом.

//creating instance for Application class 
var myApp=new Marionette.Application(); 
//registering command 
myApp.Commands.setHandler("functionName",function(){alert("This is just a normal function but way of defining as different in my point of view.")}); 
//whereever you want to call this command just run that command with corresponding name 
myApp.Commands.execute("functionName"); 

То, что я имею в виду, как нормальные функции и Marionette.Commands одинаковы. Если это правильно, почему разработчики Marionette разработали концепцию Marionette.Commands?

ответ

4

Чтобы использовать функцию, вам необходимо либо вызвать ее из той же области действия, либо получить ссылку на содержащий объект. Это не относится к командам, поэтому они позволяют развязать.

Предположим, вы хотите изменить цвет меню, когда пользователь нажимает на какую-либо кнопку в вашем приложении. Вы можете определить функцию changeColor в (например) той части приложения, которая управляет заголовком. Затем вы можете изменить цвет меню, вызвав (например) myHeader.changeColor() откуда-то в вашем приложении. Но, как упоминалось выше, это означает, что вам нужна ссылка на myHeader, чтобы иметь возможность вызвать его метод changeColor.

По мере разработки приложения вы понимаете, что на самом деле меню само по себе становится довольно сложным, и имеет смысл изменить его собственный цвет напрямую (вместо того, чтобы заголовок управлял цветом). Теперь вам нужно зайти в ваше приложение и изменить каждый экземпляр myHeader.changeColor() на myMenu.changeColor(). Это связано с объединением различных битов вашего приложения.

Если вместо этого вы используете команды, вы должны выполнить команду из мест, которые должны изменить цвет меню, и вы определяете обработчик в части «header». Затем, когда вы решите изменить дизайн приложения, вы можете просто переместить обработчик так, чтобы он был определен в части «меню». С помощью этого решения вам не придется менять фактические вызовы, чтобы изменить цвет меню, потому что они полностью развязаны.

В обоих вариантах вы можете изменить цвет меню. Но использование команд позволяет лучше развязывать и меньше работать по дороге. Конечно, это не означает, что вы должны использовать команды везде: адаптировать их использование (или нет) к вашему конкретному случаю.

+0

Буквально _just_ закончил вашу книгу. Потрясающие. – eightyfive

+0

Спасибо! Я только начал работать над новой книгой с более продвинутым контентом. Будьте на связи! (Кроме того, не могли бы вы добавить свои отзывы на https://leanpub.com/marionette-gentle-introduction/feedback? Я был бы признателен.) –

0

Они такие же. Я имею в виду, что все всегда по дороге (функция) всегда. Ха-ха.

Важно то, что вы делаете из этого. Итак, в конце концов, это всего лишь вопрос вкуса/профессионализма (соблюдение паттернов, условностей и т. Д.).

С commands, у вас есть все в одном месте и только myApp отвечает за связь между модулями/контроллеры/доменами/независимо «функциональный конечный результат» (цитата @David Sulc очень хорошая книга: «Backbone.Marionette.js: A Gentle Introduction») вашей заявки.

Короче говоря: в большом приложении имеет смысл только обходить экземпляр myApp и выполнять команды оттуда.

Примечание: И это имеет еще большее значение, когда вы используете RequireJS.

Это более чистый, более структурированный.

Смежные вопросы