Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.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_Knockout.js - Fatal编程技术网

Javascript 我的可观测属性在哪里?

Javascript 我的可观测属性在哪里?,javascript,knockout.js,Javascript,Knockout.js,我试图输出到domdatabind=“text:row.state()”但它不起作用。我不认为问题出在json.stringify上,它只是一个例子,说明了值对于html中的ko foreach是不可见的 我正试图在一个更大的应用程序中调试一些东西,我试图做一个简单的例子,说明我的应用程序是如何崩溃的,我甚至不能得到我的基本对象属性来显示。p> 行中每个对象的2个可观察属性在哪里?当我尝试使用“row.state()”时,它不存在,正如您在dom中的字符串化“text”中看到的那样 请思考。可

我试图输出到domdatabind=“text:row.state()”但它不起作用。我不认为问题出在json.stringify上,它只是一个例子,说明了值对于html中的
ko foreach
是不可见的

我正试图在一个更大的应用程序中调试一些东西,我试图做一个简单的例子,说明我的应用程序是如何崩溃的,我甚至不能得到我的基本对象属性来显示。p> 行中每个对象的2个可观察属性在哪里?当我尝试使用“row.state()”时,它不存在,正如您在dom中的字符串化“text”中看到的那样


请思考。

可观察对象就在那里-只是您在包含它们的对象上使用了JSON.stringfy。这将排除函数,只序列化POJO(普通的旧JavaScript对象)

正如Jamiec指出的,每个可观察对象实际上都是函数,因此它们的内容不会被序列化

因此,对于您序列化的每个框:

  thing = {
        id: 1,
        bool: ko.observable(false),
        state: ko.observable('disabled')
    },
    thing = {
        id: 2,
        bool: ko.observable(false),
        state: ko.observable('disabled')
    },
    thing = {
        id: 3,
        bool: ko.observable(false),
        state: ko.observable('disabled')
    }
唯一可能的输出是3个ID

如果将对象转换为普通JavaScript对象,使这些属性不再是函数,则它将按预期进行序列化:

var viewModel={
切换:功能(行){
row.bool(!row.bool);
},
显示状态:函数(行){
if(row.bool()){
行状态(“已启用”);
}否则{
行状态(“已禁用”);
}
console.log(row.state);
},
行:[
事情={
id:1,
bool:ko.可观察(假),
状态:可观察到(“禁用”)
},
事情={
id:2,
bool:ko.可观察(假),
状态:可观察到(“禁用”)
},
事情={
id:3,
bool:ko.可观察(假),
状态:可观察到(“禁用”)
},
],
选项卡:[
tab='tab1',
tab='tab2',
tab='tab3'
],
}
应用绑定(视图模型)

这是


可观察的
状态绝对存在,它只是你输出数据的方式隐藏了它们

通过更新按钮上的绑定,可以看到这一点:

<button class="btn btn-default" data-bind="text: row.state, click: function(){$root.toggle(row)}"></button>
-------------------------------------------------^ here
应该是

row.bool(!row.bool())
(电话:@CrimsonChris)

设置
状态的某些方式也是如此。总之,所有的问题都解决了,我想这把小提琴做了你一开始想做的事情


我很困惑-JSFIDLE没有任何可观察的属性(除了数组)oops忘记更新了,现在检查一下你在控制台上看到了吗?在属性列表之后出现错误:
SyntaxError:missing}
。我给你修好了:好的,现在请再检查一下。这不是语法错误,我尝试了其他方法,但忘记了将所有内容放回原处。您将看到我正在串接我的行,它们只打印出每件事情的ID属性。但是有3个属性,其中2个(ko可观测值)不可见…………我得到了一个
未捕获的SyntaxError:Unexpected identifier
,除非我在我的应用程序中对它们进行字符串化,它们就在那里。函数打印为function(),它们至少在那里有属性名。这是不正常的。即使当我试图以“row”的形式访问它们时,为了让它100%清晰,当你编写
ko.observable(blah)
时,你正在创建一个函数,而
JSON.stringify
将它们排除在外。我以前有过stringized函数。我以前记录过函数,它会键入“function(){…}”“或者类似的东西。这是不正常的行为。当我在应用程序中进行字符串化时,函数属性仍然存在。当我尝试在html中使用“text:row.state()”时,它不起作用,就好像它不存在、没有值或未定义一样。这是不正确的。我不是第一天使用KO的。这是不正常的,值得注意的是,简单地调用
ko.toJS
,然后对结果调用
JSON.stringify
,或者只调用
ko.toJSON
将做正确的事情(请参阅)。@nathanrogers我把你的评论标记为粗鲁,它们将消失。你想用文明的语言再试一次吗?毕竟这里的人都在努力帮助你!
row.bool = !row.bool;
row.bool(!row.bool())