передача переменных в триггере 'bind' - PullRequest
1 голос
/ 02 февраля 2012

Я использую backbone.js с jquery droppable.

Проблема, с которой я столкнулся, заключается в том, что при входе в функцию .droppable слово «this» больше не относится к магистральному объекту.Я прочитал статью Иегуда Каца о понимании «этого», но я все еще не понимаю, как «решить» проблему.http://yehudakatz.com/2011/08/11/understanding-javascript-function-invocation-and-this/

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

вот выдержка из моего кода.В строке MyApp.User.Trigger('new_class'); есть ли способ добавить переменную ??Как я могу поместить это в событие связывания?

initialize: function(){
    user = MyApp.User;
    MyApp.User.bind('new_class',this.save, this);
    this.render();
},

render: function(){

    $('li.empty').droppable({

        hoverClass: "ui-state-active",
        start: function(e){
            $(this).click('unbind');
        },
        drop: function(event, ui){
            var add_class_to_user = $(this).attr('data-id');
             MyApp.User.Trigger('new_class');
        }
    })

},

save: function(class){
    var add_class = new Myapp.Model.Class({ 
        class_id: class,
        user_id: user.id
    });
    add_class.save()
}

1 Ответ

4 голосов
/ 02 февраля 2012

Я не уверен, что понимаю, что вы спрашиваете, поэтому я отвечу на оба вопроса:

в контексте этого:

и почему бы вам не сохранить ссылку на это в новой переменной?

...

render: function(){
    // here we put this in a new variable myView.
    var myView = this;

    $('li.empty').droppable({
        hoverClass: "ui-state-active",
        start: function(e){
            $(this).click('unbind');

            // here you can use myView instead of this, if you want something from your view.
            myView.model.set({'name', 'newname'});

        },
        drop: function(event, ui){
            var add_class_to_user = $(this).attr('data-id');
             MyApp.User.Trigger('new_class');
        }
    })
},

...

по вопросу передачи параметров в событие

...

render: function(){
    $('li.empty').droppable({
        hoverClass: "ui-state-active",
        start: function(e){
            $(this).click('unbind');
        },
        drop: function(event, ui){
            var add_class_to_user = $(this).attr('data-id');
             MyApp.User.Trigger('new_class', add_class_to_user);
        }
    })
},

...

в вашей пользовательской модели вы, конечно, должны сделать это: (или, скорее, в другом представлении, вы можете привязать это событие к пользовательской модели)

MyApp.User.bind('new_class', function(myparameter) {
    alert('yay, my parameter is:'  + myparameter);
    $('#myElement').addClass(myparameter);
});

пример в jsfiddle: можно найти здесь .... http://jsfiddle.net/saelfaer/MWuHj/

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