2013-10-15 22 views
0

使用backbone和requirejs。我想使用輸入掩碼。我在視圖中添加了另一個jQuery構造,它工作得很好,但是掩碼並沒有出現在手機領域。我究竟做錯了什麼?謝謝。使用jQuery掩碼和骨幹

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' 
    }); 

回答

0

用於把一個視圖頁面上通常的模式是這樣的:

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

v.render()電話增加了一些HTML到視圖的elel不會在頁面上之後才append完成,發生在render完成後。所以,如果你有一個render這樣的:

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

然後$pancakes#pancakes裏面this.$el但它不是該網頁上還和$('#pancakes')看起來在頁面上是空的。

回到你的代碼,我猜#custphone和朋友來自你的模板。這意味着他們將在視圖的$el中,但不在頁面本身當您$('#custphone').mask(...);結果是你在一堆空的jQuery對象上調用mask

您可以使用find來尋找合適的地方的那些元素:

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

,或者您可以使用this.$功能骨幹,爲你設置:

$(jQuery的)view.$(selector)

如果jQuery包含在頁面中,則每個視圖都有一個$在查看元素內運行查詢的函數。 [...]這相當於運行:view.$el.find(selector)

所以this.$(x)或多或少的this.$el.find(x)的簡寫形式,你會說:

this.$('#custphone').mask('(999) 999-9999'); 
//... 
+0

感謝 - 這個「渲染問題」似乎來了很多。因此,View/render()接受我的模板並使用它向DOM添加節點,並在View/render()中設置新的DOM項,但如果我引用當前的DOM,因爲我的節點不存在在實例化/當前HTML中,所以它是一種空引用? – Tom

+0

差不多。 'render'(通常)只會將東西放入'this.el'中,除非有人在頁面上放置了視圖的'el',否則任何東西都不會進入DOM。如果你說'this。$('#id')'那麼你在'this.el'裏面尋找'#id',如果你說'$('#id')'那麼你看着正在頁面上顯示的主要DOM;如果'#id'不在頁面上,那麼'$('#id')。length'將爲零,你將無法做任何有用的事情。 –