Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.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 Knockoutjs和建立视图模型_Javascript_Html_Twitter Bootstrap_Mvvm_Knockout.js - Fatal编程技术网

Javascript Knockoutjs和建立视图模型

Javascript Knockoutjs和建立视图模型,javascript,html,twitter-bootstrap,mvvm,knockout.js,Javascript,Html,Twitter Bootstrap,Mvvm,Knockout.js,我在视图模型中有一个带有数组的可观察的对象,我想用不同的项填充它,项1、项2,每个项都有自己的设置。所以我想找出最好的方法来解决这个问题 我目前的设置很糟糕,仍然有一些错误,我无法找出我做错了什么 例如,我创建了一个item1,然后保存,然后尝试创建另一个item1,当弹出窗口时,输入字段将填充我创建的第一个item1的值,我不知道为什么,因为我在保存后重置了变量 我只是想知道我做的是否正确,我能做些什么使它更好 请看我的 我确实缩小了我的Item1,但请记住,我有10多个变量 我也知道Item

我在视图模型中有一个带有数组的
可观察的
对象,我想用不同的项填充它,项1、项2,每个项都有自己的设置。所以我想找出最好的方法来解决这个问题

我目前的设置很糟糕,仍然有一些错误,我无法找出我做错了什么

例如,我创建了一个item1,然后保存,然后尝试创建另一个item1,当弹出窗口时,输入字段将填充我创建的第一个item1的值,我不知道为什么,因为我在保存后重置了变量

我只是想知道我做的是否正确,我能做些什么使它更好

请看我的

我确实缩小了我的Item1,但请记住,我有10多个变量


我也知道Item1和Item2的设置是不同的,我只是在测试实现这一点的最佳方法,因为我知道我有10个以上变量的对象。

小改动就可以了。将
item1Setup
设置为可观察的相当简单的JavaScript变量,它不会对更改做出反应,例如
self.item1Setup=ko.observable()

视图模型:

var myViewModel = function() {
    var itemData = ko.observable({
        "data": []
    });
    var self=this;
    self.item1Setup = ko.observable(); //declare it here

    //Create Item1 Popup
    self.item1Setup(new item1("", 0, "")); // assign instance to observable

    function createItem1() {
        self.item1Setup().item1Id(getNewId()); // assign value to observable content
        itemData().data.push(self.item1Setup());
        shouldShowPopup(false, "Item1");
        //reset back to defaults
        resetVariables("Item1");
    }

    function resetVariables(resetType) {
        switch (resetType) {
            case "Item1":
                self.item1Setup(new item1("", 0, "")); //you can reset as it is observable UI takes it changes
                break;
            default:
        }
    }

    return {
        itemData: itemData,
        item2Id: item2Id,
        item2Title: item2Title,  
        item2Location: item2Location,
        item1Setup: self.item1Setup, //return observable 
        addItem2: addItem2,
        createItem1: createItem1,
        editItem1: editItem1,
        getItem1FromList: getItem1FromList,
        resetVariables: resetVariables
    }
}

我突然出现了一些代码来解释关键问题检查createitem1的工作小提琴。

有几种方法可以使其更好:

  • 对按钮使用敲除的单击绑定
  • 创建一个可观察的布尔值来控制模态可见性(每个模态都有自己的变量,它们都使用相同的绑定类型)
  • 让你的物品成为自己的物品;没有以item2等为前缀的变量
  • 不要让
    resetVariables
    之类的东西去弄清楚你在使用哪种项目类型,让项目知道如何重置自己

  • 好极了真不敢相信我一开始没这么做!非常感谢!完美现在我的问题解决了,我将大胆地做出一些改变!谢谢你的好建议!