2013-12-11 4 views
0

Я использую плагин Jquery rateIt в моем проекте магистрали.JQuery rateIt плагин не работает

Я использую его примерную часть AJAX.

я мог видеть изображения не загружаются не вызова, проходящего через и нет ответа, и некоторое время получает ошибку как

«неперехваченного TypeError: Объект rateAnswer не имеет какую-либо методы" применить»

вот мой JS

define(['jquery', 'underscore', 'backbone', 'text!tpl/questionnaire.html', 'Collection/cAppCollection', 'Models/mAppModel', 'jqueryRateIt'], 
function($, _, Backbone, questionnaireTpl, appCollection, appModel, jqRateIt) { 

var questionnaire = Backbone.View.extend({ 

    el : '.row', 
    template : _.template(questionnaireTpl), 

    initialize : function(e) { 

     $('.hero-unit').css('display','none'); 
     this.render(e); 
    }, 
    //this renders my template 
    //on success of response , loads response than call rateit() function than bind rated and reset to function rateAnswer 
    //but here no call fo rateAnswer 
    render : function(e) { 

      var elem = this.$el, 
       temp = this.template, 
       appCollectObj = new appCollection(); 

       appCollectObj.fetch({ 
        data: $.param({subject: e.id}), 
        success: function(model, response) { 
          $(elem).html(temp({model:response})); 
          $('div.rateit').rateit(); 
          $('#products .rateit').bind('rated reset', 'rateAnswer'); 
          }, 
        error: function() { 
          console.log('Failed to fetch!'); 
          } 
       }); 

    }, 

    rateAnswer : function(){ 

       var ri = $(this), 
       appCollectObj = new appCollection(); 


       var value = ri.rateit('value'); 
       var questionId = ri.data('productid'); 

       appCollectObj.fetch({ 
        data: $.param({questionId : questionId, value : value}), 
        success: function(model, response) { 
          $('#response').append('<li>' + data + '</li>'); 
          }, 
        error: function() { 
          $('#response').append('<li style="color:red">' + msg + '</li>'); 
          } 
       }); 
    } 
    }); 

    return questionnaire; 
}); 

и HTML часть

<div id="products"> 
     <ul> 
      <li> 
      RateIt: <div data-productid="<%= elem.id %>" class="rateit"></div> 
      </li> 
     </ul> 
     <ul id="response"></ul> 
     </div> 

here the link to RateIt plugin example

ответ

1

Сообщение об ошибке типично для некорректного выполнения привязки событий ... (попытка вызова применить к чему-то, что не является функцией).

$('#products .rateit').bind('rated reset', 'rateAnswer'); 

Я никогда не видел этот синтаксис, где вы видели в документации, что вы можете дать строку вместо параметра функции?

Здесь вы хотите связать с функцией, которая находится за пределами вашего обратного вызова, так что перед appCollectObj.fetch, добавить что-то вроде:

var thisView = this; 

Тогда это, вероятно, следует:

$('#products .rateit').bind('rated reset', thisView.rateAnswer); 

И у вас, вероятно, будут проблемы, потому что это в обработчике событий не будет работать так, как вы ожидаете ... поэтому вы можете обернуть свой rateAnswer с помощью $ .proxy (или _.bindAll от _.underscore ...):

$('#products .rateit').bind('rated reset', $.proxy(thisView.rateAnswer, thisView)); 
+0

Пробовал $ .proxy (this.rateAnswer, this), а также $ .proxy (this.rateAnswer, this) до сих пор нет вызова функции rateAnswer – mayank

+0

$ ('# products .rateit'). Bind ('rated reset' , 'rateAnswer'); здесь передача строки вместо функции была моей плохой благодарностью за исправление. Теперь у меня нет ошибки, но нет вызова функции связывания. – mayank

+0

. Ах, плохо, я делаю слишком много coffeescript (и его красивую жирную стрелку). Вы уже находитесь в обратном вызове, поэтому «это» уже «неправильно». Я отредактировал свой ответ. – Enders

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