2013-09-23 89 views
9

Chỉ một điều tôi cố gắng thực hiện điều đó sẽ thực sự đơn giản hóa cuộc sống của tôi ngay bây giờ.Gọi hàm bên trong mẫu gạch dưới bằng cách sử dụng xương sống

Làm thế nào tôi có thể làm điều đó:

Đây là quan điểm của tôi trong tập tin ứng dụng

window.ArtView = Backbone.View.extend({ 
     template:_.template($('#art').html()), 
     render:function (eventName) { 
      var output="blablbla"; 
      $(this.el).html(this.template({"output":output})); 
      return this; 
     } 
    }); 
    ... 
    // function that I would like to call 
    function callFunction(){ 
     console.log('it works!'); 
    } 

Template trong index.html

<script type="text/tempate" id="art"> 
     <div data-role="header" class="header" data-position="fixed"> 
      <a href="#" data-icon="back" class="back ui-btn-left">Back</a> 
     </div> 
     <div data-role="content" class="content"> 
      callFunction(); 
      <% console.log(output) %> 
     </div> 
</script> 

Làm thế nào tôi có thể gọi callFunction() bên trong mẫu của tôi hoặc một cái gì đó giống nhau?

Bất kỳ ý tưởng nào?

Cảm ơn!

+3

Giữ mẫu của bạn khô. Các mẫu của bạn không được chứa bất kỳ logic nào. – TYRONEMICHAEL

+0

True, nhưng tôi nghĩ rằng có usecases cho các chức năng gọi từ mẫu. –

Trả lời

15

Tôi tin rằng bạn có thể gọi các hàm trong mẫu miễn là đối tượng cho mẫu có chức năng.

render:function (eventName) { 
    var output="blablbla"; 
    var data = _.extend({"output":output}, callFunction); 
    $(this.el).html(this.template(data)); 
    return this; 
} 

sau đó trong mẫu của bạn:

<%= callFunction() %> 
0

Điều đó sai. Hãy suy nghĩ về mẫu dưới dạng chuỗi, đánh dấu html. Bạn nhận được nó và thay thế một số phần của nó với các dữ liệu thực tế. Nếu bạn muốn thực hiện một số thao tác DOM, chúng sẽ được thực hiện sau đó. Hãy cho chúng tôi biết những gì bạn muốn làm trong callFunction và chúng tôi có thể hướng dẫn bạn đến đúng nơi cho logic đó.

+0

Có bạn đúng, tôi nghĩ về nó. Tôi muốn callFunction() là một cuộc gọi của jPlayer (một trình phát media jquery), cần một nguồn (url.mp3). Url của nguồn nằm trong đầu ra của tôi. Một chút khôn lanh phải không? –

3

đây là cách tôi đã làm nó, nó hoạt động tốt.

template: _.template(templateText , { 
      imports : { 
       check :function (val){ 
        // blah blah 
        } 
       } 
      } 
     }), 

sau đó trong html mẫu của bạn

<%= check('value') %>