如何让backbone.stickit 一次收集所有值?

Posted

技术标签:

【中文标题】如何让backbone.stickit 一次收集所有值?【英文标题】:how to make backbone.stickit collect all values at once? 【发布时间】:2014-05-27 13:54:29 【问题描述】:

问题:

我使用backbone.stickit 为表单进行2 路绑定。但是,除非我将所有属性的 updateModel 设置为 false,否则我发现很难取消该集合。所以,问题是,当用户单击保存按钮时,如何从表单中获取所有值。

A.K.A 我如何在 Stickit 中一次性手动收集数据?

我试图访问它以获取所有处理程序,以便我可以手动触发,但显然,由于getConfiguration 函数是私有的,我无权访问它。

【问题讨论】:

【参考方案1】:

看看Backbone.trackit - 它旨在帮助管理未保存的属性,并且与stickit配合得很好。

【讨论】:

不错!这就是我要找的。​​span> 【参考方案2】:

我错了。 getConfiguration 可以通过Backbone.Stickit.getConfiguration 访问,所以我想出了这个函数来获取所有值。

  // for backbone form views with stickit enabled
  // to get all observed fields at once
  var stickitGetValues = function (values) 
    _.each(this.bindings, function(v, selector) 
      var namespace = '.stickit.' + this.model.cid;
      var $el = this.$(selector);
      var binding = this.bindings[selector];

      var config = Backbone.Stickit.getConfiguration($el, binding);

      if (values.indexOf(config.observe) != -1 && config.events && config.events.length > 0) 
        var event = config.events[0] + namespace;
        var val = config.getVal.call(this, $el, event, config);
        this.model.set(config.observe, val, silent: true);
      
    , this);
  

要使用它,只需在主干视图中调用它

stickitGetValues.call(this, ["name", "age", "whatever"]);

因此视图的模型将相应更新。

【讨论】:

以上是关于如何让backbone.stickit 一次收集所有值?的主要内容,如果未能解决你的问题,请参考以下文章

模型未在表单提交时更新,使用 Backbone + Stickit

使用 Backbone stickit 进行 Backbone Validation - 更改属性时验证所有属性

我正在使用backbone.stickit 进行模型绑定。如何将预填充选择与模型绑定?

Backbone.stickit 和 html-form:如何只保存(补丁)更改的属性?

为 Backbone.Stickit.js 绑定设置全局 setOptions

与 require.js 和 backbone.stickit 一起使用时出现奇怪的 Backbone.Validation 错误