0

Using backbone and requirejs. I want to use an input mask. I put another jQuery construct in the view and it works just fine, but the mask doesn't show up in the phone fields. What am I doing wrong? Thanks.

render: function(){
var compiledTemplate = _.template( RegisterTemplate, this.model );
this.$el.html(compiledTemplate); 

  $("#custphone").mask("(999) 999-9999");  //masks not showing up
  $("#custphone2").mask("(999) 999-9999");
  $("#custzip").mask("99999");
  $("#venuezip").mask("99999");

  $().acknowledgeinput({               //works fine!
          success_color: '#00FF00',
      danger_color: '#FF0000',
      update_on: 'keyup'
   });
4

1 回答 1

0

在页面上放置视图的常用模式如下所示:

var v = new SomeView();
$(something).append(v.render().el);

v.render()调用将一些 HTML 添加到视图中,el但在完成el之后才会出现在页面上,并且会在完成append之后发生render。所以如果你有render这样的:

this.$el.html('<span id="pancakes">Pancakes</span>');
var $pancakes = $('#pancakes');

然后$pancakes将在#pancakes内部为空,this.$el但它不在该页面上,$('#pancakes')并将在页面上查看。

回到你的代码,我猜#custphone和朋友来自你的模板。这意味着它们将在视图中$el而不是页面本身中$('#custphone').mask(...);结果是你调用mask了一堆空的 jQuery 对象。

您可以使用find在正确的位置查找这些元素:

this.$el.find('#custphone').mask('(999) 999-9999');
//...

或者您可以使用this.$Backbone 为您设置的功能:

$ (jQuery) view.$(selector)

如果页面中包含 jQuery,则每个视图都有一个$函数,用于运行视图元素范围内的查询。[...] 这相当于运行:view.$el.find(selector).

所以this.$(x)或多或少是一种简短的形式,this.$el.find(x)你会说:

this.$('#custphone').mask('(999) 999-9999');
//...
于 2013-10-15T15:53:58.070 回答