gpt4 book ai didi

events - 绑定(bind)到模型更改事件在backbone.js View 中不起作用

转载 作者:行者123 更新时间:2023-12-02 05:48:21 24 4
gpt4 key购买 nike

我正在创建一个非常简单的主干应用程序来熟悉该框架。在我看来,除了将模型更改事件绑定(bind)到函数之外,一切正常。我检查了之前关于 SO 的问题,但没有一个有帮助。

我的模型有一个变量“计数器”。 View 有 2 个按钮,可增加或减少模型的“计数器”。简单的东西。这一切都工作正常,但是当我尝试在 View 中监听模型更改事件时,我只在模型创建时收到通知(我假设是在创建默认值时)。

我知道计数器正在更新,因为如果我在更新模型后手动调用渲染,我可以看到效果,但为了更好的 mvc-ish 结构,我想查看更改事件的通知并更新本身。

下面是coffeescript代码。

  $ ->

class Count extends Backbone.Model

defaults: counter : 0

change: -> console.log('changed')


class Spinner extends Backbone.View

el: $('#counterView')

initialize: =>

@model = new Count()
@model.bind 'change' , @update()

events:
'click button#incBtn' : 'inc'
'click button#decBtn' : 'dec'

inc: ->

@model.set counter : @model.get('counter') + 1

dec: ->

@model.set counter : @model.get('counter') - 1

update: ->

console.log('update')
$('#num').html(@model.get 'counter')

view = new Spinner()

HTML:

<body>
<div id="counterView">
<button id="incBtn">Increment</button>
<button id="decBtn">Decrement</button>
<div id="num">Number</div>
</div>
</body>

提前致谢。

最佳答案

您的错误在这里:

@model.bind 'change' , @update()

您告诉它的是将 change 事件绑定(bind)到 @update() 返回(当您想要绑定(bind)它时)到@update本身。所以应该是:

@model.bind 'change' , @update

(不带括号)。事实上,Spinner.update 会立即在 Spinner.initialize 上执行,正如您发现的那样。更多注意事项:

  • 无需等待 document.ready 创建类。您可以先这样做(在 document.ready 之外),然后仅在 document.ready 上实例化模型、 View 等。
  • 在 View 中创建新模型似乎有点奇怪。您可能想做这样的事情:

    view = new Spinner(model: new Count)

编辑: 作为 Trevor Burnham notes below ,您希望在 incdec 上使用粗箭头 => >更新。已修复如下。

综合起来:

class Count extends Backbone.Model

defaults: counter : 0

change: -> console.log('changed')


class Spinner extends Backbone.View

el: '#counterView'

initialize: =>

@model.bind 'change' , @update

events:
'click button#incBtn' : 'inc'
'click button#decBtn' : 'dec'

inc: =>

@model.set counter : @model.get('counter') + 1

dec: =>

@model.set counter : @model.get('counter') - 1

update: =>

console.log('update')
@$el.find('#num').html(@model.get 'counter')

$ ->
view = new Spinner(model: new Count)

关于events - 绑定(bind)到模型更改事件在backbone.js View 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9482950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com