передача данных JSON по триггеру - PullRequest
3 голосов
/ 28 октября 2009

Я звоню в службу, которая возвращает данные json.

сценарий:

$.ajax({
    type: "POST",
    url: "/some/service",
    dataType: "json",
    success: function(response) {
        if (response.status == "ok" && response.messages.length > 0) {

            // obj is a jQuery object
            obj.trigger(SOME_EVENT, response.messages);

        }
    }
});

это пример ответа:

{
  "status":"ok",
  "messages":[
     {"id":1,"message_text":"latihan"},
     {"id":123,"message_text":"hello"}]
}

когда obj получил триггер SOME_EVENT, я ожидаю, что он будет передавать данные сообщений ниже:

[{"id":1,"message_text":"latihan"},
 {"id":123,"message_text":"hello"}]

но когда я выводил параметр сообщения на консоль,

// on receiving messages
obj.bind(SOME_EVENT, function(sender, messages) {
    console.log(messages);
});

получи, только последнее сообщение прошло ниже

{"id":123,"message_text":"hello"}

Кто-нибудь может объяснить, почему массив сообщений не передается моим пользовательским событием?

Ответы [ 2 ]

5 голосов
/ 28 октября 2009

С http://docs.jquery.com/Events/trigger, вторым параметром функции trigger является массив дополнительных аргументов (передаваемых после объекта события).

Значением вашего свойства response.messages является массив, поэтому они фактически передаются вашему обработчику в виде отдельных аргументов:

obj.bind(SOME_EVENT, function(sender, message1, message2/*, etc*/) {
    console.log(message1); // {"id":1,"message_text":"latihan"}
    console.log(message2); // {"id":123,"message_text":"hello"}
});

Вы можете собрать их как один массив с помощью:

obj.bind(SOME_EVENT, function(sender) {
    var messages = Array.prototype.slice.call(arguments, 1);
    console.log(messages); // [{"id":1,"message_text":"latihan"},
                           //  {"id":123,"message_text":"hello"}]
});
3 голосов
/ 28 октября 2009

crescentfresh ответ правильный, оба решения работают и действительны.

Вот третий вариант для вас. Вы можете назвать trigger -метод вот так

obj.trigger(SOME_EVENT, new Array(response.messages));

тогда console.log(messages); выведет то, что вы ожидаете

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