Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干线组件-恢复型号更改_Javascript_Backbone.js_2 Way Object Databinding - Fatal编程技术网

Javascript 主干线组件-恢复型号更改

Javascript 主干线组件-恢复型号更改,javascript,backbone.js,2-way-object-databinding,Javascript,Backbone.js,2 Way Object Databinding,我现在正在测试双向数据绑定的主干stickit。是否有办法恢复更改,例如,在通过表单编辑模型数据时,用户按下取消按钮,如下图所示 当我们输入表单时,模型似乎在动态变化。我想要的是,当用户按下“取消”按钮时,模型将恢复到其原始值 我了解到updateModel需要一个真值来确认模型更新。但是,我的编辑视图[cancel event]如何触发updateModel函数的假值,从而使模型不会用textfield值更新 我需要全局变量之类的东西吗 //global variable var updat

我现在正在测试双向数据绑定的主干stickit。是否有办法恢复更改,例如,在通过表单编辑模型数据时,用户按下取消按钮,如下图所示

当我们输入表单时,模型似乎在动态变化。我想要的是,当用户按下“取消”按钮时,模型将恢复到其原始值

我了解到updateModel需要一个真值来确认模型更新。但是,我的编辑视图[cancel event]如何触发updateModel函数的假值,从而使模型不会用textfield值更新

我需要全局变量之类的东西吗

//global variable
var updateModelTitle = true;

//backbone stickit bindings
  bindings: {
    '#title': {
      observe: 'title',
      updateModel: 'confirmUpdate'
    }
  },
  confirmUpdate: function(val, event, options) {
    return updateModelTitle;
  }

//cancel button event click event
updateModelTitle = false;

提前感谢您的帮助。

这是我解决这个问题的方法。我什么都不做。我要做的是,如果用户单击cancel按钮,使用模型id并从restful服务器获取原始数据。然后使用来自服务器的数据通过stickit 2路绑定还原模型更改

    canceledit: function() {
        var modelIndex = this.model.get('index');
        var modelId = this.model.get('id');

        this.$el.fadeOut(500, function() {

            var fetchTask = new App.Models.Task({ id: modelId });

            fetchTask.fetch({
                wait: true,
                success: function(model, response, options) {
                    var title = model.get("title");
                    var task = App.Collections.tasksCollection.at(modelIndex);
                    task.set({title : title});
                },
                error: function(model, response, options) {
                    console.log('An error occured while fetching the data...');
                }
            });

            this.remove();
        });
    }
如果您的解决方案不需要从服务器获取数据即可通过backbone.stickit恢复模型更改,请发布您的答案

更新-基于Jack建议的第二个解决方案-无休息电话

//create global variable for model collection index and title properties
App.Global.modelTaskCurrentTitle = "";
App.Global.modelTaskIndex = -1;

//in edit view render function
//capture info needed
App.Global.modelTaskIndex = this.model.get('index');
App.Global.modelTaskCurrentTitle = this.model.get('title');

//in cancel function for edit-view
//or any view that need to remove edit-view to prevent zombie-edit-view
//and also reverting model changes by stickit in edit-view

//revert stickit changes
var task = App.Collections.tasksCollection.at(App.Global.modelTaskIndex);
task.set({title : App.Global.modelTaskCurrentTitle});

//remove edit view
App.Views.editTaskView.remove();

试试主干网。Stickit的姐妹项目:

我会使用

bindings: {
  '#title': {
    observe: 'title',
    event: ['change']
    updateModel: function(val, event, options) {
      if (val)
        return val;
    }
  }
}

<form>
<input id="title" type="text">
<button type="Cancel" data-action="destroy-view">
<button type="submit">OK</button>
</form>
绑定:{
"标题":{
注意:'标题',
事件:[“更改”]
updateModel:函数(val、事件、选项){
if(val)
返回val;
}
}
}
好啊
因此,模型属性将仅在提交时更改

类似的操作(但避免访问服务器),如果有操作将视图置于编辑模式,然后,您可以做的是制作模型的本地副本,然后在用户按“取消”时使用该副本重置模型,或者在用户按“详细信息/编辑视图”时使用该副本将模型传递给“详细信息/编辑视图”,并在用户按“保存”时使用该副本更新模型。