2013-10-15 1 views
0

백본 및 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() 호출 뷰의 el에 일부 HTML을 추가하지만 el가 끝날 때까지 페이지에되지 않습니다 append가 완료되고 이는 render이 완료된 후에 발생합니다. 이 같은 render 그래서 만약 : #pancakes 내부 this.$el이지만 아직 해당 페이지에 있지 않고 $('#pancakes') 페이지에 모양으로

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

$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 아이템을 설정하고 있습니다. 그러나 현재 노드를 참조하면 노드가 존재하지 않기 때문에 인스턴스화 된/현재 HTML에서, 그래서 그것은 일종의 null 참조였습니까? – Tom

+0

거의. 'render' (대개)는'this.el'에만 물건을 넣습니다. 누군가가 당신의 뷰의'el'을 페이지에 올릴 때까지 아무것도 DOM에 들어 가지 않습니다. 'this. $ ('# id')'라고 말하면'this.el '안에'# id'를 찾고 있습니다.'$ ('id id')라고하면' 페이지에 표시되는 기본 DOM. '# id '가 페이지에 없으면'$ ('id id '). length'은 0이되고 그걸로 유용하게 쓸 수 없습니다. –