首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么重置表单不能清除绑定的模型属性

为什么重置表单不能清除绑定的模型属性
EN

Stack Overflow用户
提问于 2017-12-20 20:05:10
回答 1查看 102关注 0票数 2

我已经使用backbone-stickit bindings将表单中的文本输入绑定到Backbone Model

代码语言:javascript
复制
bindings: {
    '#txtRemarks': 'remarks',
    '#txtFromAccountNumber': 'account_no',
    '#fileChooser':'fileChooser'
}

当我重置表单时,文本输入中的值将被清除,但这些值仍然存在于模型属性中。

EN

回答 1

Stack Overflow用户

发布于 2017-12-21 14:31:55

输入元素的粘贴板默认处理程序为(source):

代码语言:javascript
复制
{
    selector: 'input',
    events: ['propertychange', 'input', 'change'],
    update: function($el, val) { $el.val(val); },
    getVal: function($el) {
        return $el.val();
    }
}

它监听'propertychange', 'input', 'change',表单重置不会触发这些事件。

您将需要手动侦听表单的reset事件,并手动更新模型。

代码语言:javascript
复制
var FormView = Backbone.View.extend({
    bindings: { /* ... */ },
    events: {
        '#form-id reset': 'onReset',
    },
    ui: {
        remarks: '.remarks-input',
        account: '.account-input'
    },

    onReset: function(e) {
        this.model.set({
            remarks: this.getUI('remarks').val(),
            account: this.getUI('account').val(),
        });
    }
});

或者,处理表单时的另一个技巧是在进行任何更改之前将模型的副本保留在其初始状态。然后,您可以使用副本来重置属性或检查是否有更改。

代码语言:javascript
复制
var FormView = Backbone.View.extend({
    bindings: { /* ... */ },
    events: {
        '#form-id reset': 'onReset',
    },
    initialize: function() {
        this.master = this.model.clone();
    },

    onReset: function(e) {
        this.model.set(this.master.attributes);
    },
    getChanges: function() {
        return this.master.changedAttributes(this.model.attributes);
    },
    isDirty: function() {
        return Boolean(this.getChanges());
    },
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47905695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档