Помогите с областью JavaScript - PullRequest
       1

Помогите с областью JavaScript

3 голосов
/ 01 февраля 2010

Боюсь, что сегодня я теряю шарики, потому что не знаю, как делать то, что хочу. Я хочу настраиваемое приглашение, которое я могу вызывать из любых других моих функций JavaScript. Я не знаю, как получить эту работу, даже если она чувствует , как будто я делал это сто раз.

Вот пример

var modal = function() {

    var prompt = function(msg) {
        // custom prompt builder here... let's return hard coded for example's sake
        return true;
    };

}();

var items = function() {
    var init = function() {

        $('.delete').click(function() {
            var confirm = modal.prompt('Are you sure you wanna delete that pal?');
        });

    };    


    $(document).ready(init);    
}();

То, что я хочу сделать, это вызвать метод подсказки модального и получить возвращаемое значение, основанное на вводе пользователем. Теперь я могу это сделать, но у меня возникают проблемы с вызовом внутреннего метода. Я хочу сгруппировать их, потому что, вероятно, у меня тоже будет свой модал alert().

Пожалуйста, не предлагайте встроенный JavaScript OK / Cancel, так как я должен сделать это на заказ.

Большое спасибо!

Ответы [ 4 ]

4 голосов
/ 01 февраля 2010

При вызове modal.prompt кажется, что вы хотите, чтобы анонимная функция возвращала объект, который будет сохранен в modal:

var modal = (function() {
    // various private fields & methods here
    ...
    // the public interface
    var self = {
        prompt: function(msg) {
            // custom prompt builder here... let's return hard coded for example's sake
            return true;
        }
    };
    return self;
})();
3 голосов
/ 01 февраля 2010

Для вашей первой проблемы, функция prompt объявлена ​​как переменная в вашем modal объекте, вы не можете получить к ней доступ, потому что на самом деле вы не предоставляете ее публично:

var modal = (function() {
  var privateMethod1 = function () {/*...*/},
      privateVar = 'foo';

  function privateMethod2() {
    //...
  }

  return { // public members
    prompt: function (msg) {
      // custom prompt builder here... let's return hard coded for example's sake
      return true;
    }
  };
})();

Теперь для следующего выпуска:

То, что я хочу сделать, это вызвать метод подсказки модального и получить возвращаемое значение, основанное на вводе пользователем.

Пользовательский ввод является асинхронным действием, я бы порекомендовал вам использовать модель на основе обратного вызова, встроенный JavaScript OK / Cancel window.prompt может на самом деле возвращать значение, потому что останавливает выполнение кода и ждет ввода пользователя.

var modal = (function() {
    return {
      prompt: function(msg, okCallback, cancelCallback) {
        // ...

        $('#okButton').click(function () {
          // internal actions here, like closing the dialog, cleanup, etc...
          okCallback(); // execute the ok callback
        });

        $('#cancelButton').click(function () {
          // ...
          cancelCallback(); // execute the cancel callback
        });
      }
    };
})();
2 голосов
/ 01 февраля 2010

Я настоятельно рекомендую всем, у кого есть привычка писать код JavaScript, прочитайте и поймите это http://www.jibbering.com/faq/faq_notes/closures.html.

Это критически важно.

0 голосов
/ 01 февраля 2010

Вы пробовали:

var modal = {
    prompt : function(msg) {
           return true;
         }
};

и тогда вы можете назвать это как:

modal.prompt();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...