javascript - 如何在 Marionette.js 中使用 modelEvents

标签 javascript backbone.js marionette

我有 2 个文本字段,其 ID 为源、目的地。如果任何字段值发生变化,相应的模型属性也会发生变化。我使用 Backbone.Model 和 Marionette.CompositeView 中的事件对象来完成此操作。运行良好。

一旦任何模型属性发生变化,相应的函数就会被调用。为此我编写了以下代码。它不起作用,问题是即使一个属性发生变化,两个函数都在评估。

型号代码:

var mapModel = Backbone.Model.extend({
  defaults: {
    startPlace: "",
    endPlace: ""
  }
});

Marionette.CompositeView 代码:

var mapView = Marionette.CompositeView.extend({
  events: {
    "blur #source": "sAttributeSetting",
    "blur #destination": "dAttributeSetting"
  },

  dAttributeSetting: function() {
    this.model.set({"endPlace": document.getElementById(this.ui.destinationPlace).value});
  },

  sAttributeSetting: function() {
    this.model.set({"startPlace": document.getElementById(this.ui.sourcePlace).value});
  },

  modelEvents: {
    "change startPlace": "startMarkerDisplay",
    "change endPlace": "endingMarkerDisplay"
  },

  startMarkerDisplay: function() {
    alert("start");
  },

  endingMarkerDisplay: function() {
    alert("end");
  }
});

html代码:

<input type="text" id="source">
<input type="text" id="destination">

为模型和 View 创建实例

mapModelObj = new mapModel();
var mapViewObj = new mapView({el:$('#mapDiv'), model:mapModelObj});

问题:

  1. 最初,如果我在第一个字段(源)中输入任何值,则会出现 2 个警报框(“开始”、“结束”)。

  2. 最初,如果您在第二个字段(目的地)中输入任何值,则会出现 4 个警报框(“开始”、“结束”、“开始”、“结束”)

我尝试了很多,但我不明白问题出在哪里

谁能帮帮我。

谢谢

最佳答案

modelEvents 应通过 : 连接。比如说,改变startPlace的事件应该是

'change:startPlace'

如果您使用空格,则会以两个事件结束,而不是一个特定于此属性的事件。

您的代码'change startPlace'代表两个事件,一个是'change',另一个是'startPlace'。所以你会看到“开始”,“结束”,“开始”,“结束”

关于javascript - 如何在 Marionette.js 中使用 modelEvents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19873434/

相关文章:

backbone.js - Marionette 应用程序的 ChildView 错误

javascript - 为什么 jQuery 文件上传在第一次上传后停止工作?

javascript - 未捕获的 TypeError : check. addEventListener 不是函数

javascript - Typescript:类型检查正确方法

javascript - Hammer 事件委托(delegate)和主干 View 的重用

javascript - 第一次点击时主干点击事件不会触发

javascript - Backbone 的 View 'events' 属性是否仅适用于 DOM 事件?

javascript - 无法构建简单的 React 元素

javascript - 如何访问 Backbone Marionete 应用程序内的模型?

javascript - 复合 View 绑定(bind)的初始事件