0
Person = Backbone.Model.extend(
  defaults: 
    name: 'Jony James'
    age: 30
    occupation:  'developer'

  validate: (attrs) ->
    if attrs.age < 0
      return 'Age must be positive, stupid.'
    if not attrs.name
      return 'A person must have a name! fool.'

  work: ->
    @get('name') + " is working." 
    )

PersonView = Backbone.View.extend({
    tagName: 'li'

    #template: _.template($('#personTemplate').html())
    template: "#personTemplate"

    initialize: ->
      @render()

    render: ->
      template = _.template($(@template))
      @$el.html(template)

    })

person = new Person
personView = new PersonView( model: person)
$(document.body).append personView.el

在我的index.html

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title></title>
 </head>
 <body>
  <script id="personTemplate" type="text/template">
   <strong><%= name %></strong> (<%= age %>) - <%= occupation %> 
  </script>
  <script src="js/underscore.js"></script>
  <script src="js/jquery.js"></script>
  <script src="js/backbone.js"></script>
  <script src="js/main.js"></script>
 </body>
</html>

template: _.template($('#personTemplate').html())工作@$el.html(@template(@model.toJSON()))正常。

但是使用当前版本的main.js我在 google chrome 控制台中收到此错误:

Uncaught TypeError: Object [object Object] has no method 'replace'

错误在哪里?

谢谢!

4

1 回答 1

2

错误在模板函数中。尝试传递 html 而不是 jQuery 对象:

template = _.template($(@template).html(), @model.toJSON())

于 2013-02-04T18:46:33.513 回答