如何排除绑定故障
How to Troubleshooting Binding
我找到了一个很酷的项目 (RoboJS), and I forked it: Forked Repo。我的计划是尝试使用 Polymer 1.0 添加一个漂亮的前端,并在此过程中学习一些东西。
我遇到的问题是让绑定显示在我的组件中。我构建了一个非常简单的 "robot" 组件来显示游戏期间机器人的状态。
首先,我只想在标题中显示名称,但结果是空白。这是组件:
<dom-module id="robojs-robot-status">
<template>
<div>Robot Name <span>[[robot]]</span><span>{{test}}</span></div>
</template>
</dom-module>
<script>
Polymer({
is: "robojs-robot-status",
properties: {
robot: {
type: String,
value: "testing"
},
test: {
type: String,
value: "testing2"
}
},
ready: function() {
},
init: function() {
console.log(this.robot);
console.log(this.test);
}
});
</script>
在parent组件上,我设置了robot属性:
这是属性:
<link rel="import" href="robojs-robot-status.html">
<robojs-robot-status robot="{{robot}}"></robojs-robot-status>
而且,我有一个脚本,现在可以设置就绪事件的值:
Polymer({
is: "robojs-arena",
properties: {
robot: {
type: String,
value: "hello"
}
},
ready: function() {
this.games = window.roboJS.games;
console.log(this.games);
//this.robot = {name: "hello"};
this.robot = "hello";
},
init: function() {
console.log("******* init *******");
console.log(this.robot);
document.querySelector("robojs-robot-status").init();
},
pause: function() {
window.roboJS.pause();
},
start: function() {
console.log(window.roboJS);
window.roboJS.resume();
}
});
[[robot]] 为空白。 {{test}} 绑定到 "testing2".
使用 {{robot}} 或 [[robot]] 没有区别。所以,这没有影响。
如果我删除 parent 组件中的 "robot" 属性,该值有效。它显示 "testing"。因此,它具有约束力,但与实际值无关。
除了弄清楚我在这种情况下做错了什么,是否有解决问题的好方法?我在应用程序的其他地方也遇到了类似的问题。
如果这是 Angular + jQuery,我会这样做:
$('robotjs-robot-status').scope().$eval("robot")
我可以在 Chrome 中将其输入到开发人员控制台中,然后查看它的内容并进行故障排除。我还可以在 Chrome.
中使用 Batarang 扩展
对于 Polymer,我不确定从哪里开始。任何 help/ideas?
如果此处发布的父代码段与代码中显示的完全相同,则可能是问题所在。
<link rel="import" href="robojs-robot-status.html">
应该在外面,比如
<dom-module id="robojs-robot">
<link rel="import" href="robojs-robot-status.html">
<template>
<robojs-robot-status robotname="{{robotname}}"></robojs-robot-status>
</template>
<script>
Polymer({
is: "robojs-robot",
ready: function() {
console.log('setting to Dilly');
this.robotname = "Dilly";
},
properties: {
robotname: {
type: String,
value: "hello"
}
},
});
</script>
</dom-module>
然后如果状态为
<dom-module id="robojs-robot-status">
<template>
<div>Robot Name <span>[[robotname]]</span></div>
</template>
<script>
Polymer({
is: "robojs-robot-status",
properties: {
robotname: {
type: String,
value: "testing",
observer: '_robotnameChanged'
}
},
_robotnameChanged: function(newValue, oldValue) {
console.log('_robotnameChanged: newValue='+newValue+' oldValue='+oldValue)
}
});
</script>
</dom-module>
一切都适合我。
PS:这里似乎不需要属性,因为绑定是单向的。
我找到了一个很酷的项目 (RoboJS), and I forked it: Forked Repo。我的计划是尝试使用 Polymer 1.0 添加一个漂亮的前端,并在此过程中学习一些东西。
我遇到的问题是让绑定显示在我的组件中。我构建了一个非常简单的 "robot" 组件来显示游戏期间机器人的状态。
首先,我只想在标题中显示名称,但结果是空白。这是组件:
<dom-module id="robojs-robot-status">
<template>
<div>Robot Name <span>[[robot]]</span><span>{{test}}</span></div>
</template>
</dom-module>
<script>
Polymer({
is: "robojs-robot-status",
properties: {
robot: {
type: String,
value: "testing"
},
test: {
type: String,
value: "testing2"
}
},
ready: function() {
},
init: function() {
console.log(this.robot);
console.log(this.test);
}
});
</script>
在parent组件上,我设置了robot属性:
这是属性:
<link rel="import" href="robojs-robot-status.html">
<robojs-robot-status robot="{{robot}}"></robojs-robot-status>
而且,我有一个脚本,现在可以设置就绪事件的值:
Polymer({
is: "robojs-arena",
properties: {
robot: {
type: String,
value: "hello"
}
},
ready: function() {
this.games = window.roboJS.games;
console.log(this.games);
//this.robot = {name: "hello"};
this.robot = "hello";
},
init: function() {
console.log("******* init *******");
console.log(this.robot);
document.querySelector("robojs-robot-status").init();
},
pause: function() {
window.roboJS.pause();
},
start: function() {
console.log(window.roboJS);
window.roboJS.resume();
}
});
[[robot]] 为空白。 {{test}} 绑定到 "testing2".
使用 {{robot}} 或 [[robot]] 没有区别。所以,这没有影响。
如果我删除 parent 组件中的 "robot" 属性,该值有效。它显示 "testing"。因此,它具有约束力,但与实际值无关。
除了弄清楚我在这种情况下做错了什么,是否有解决问题的好方法?我在应用程序的其他地方也遇到了类似的问题。
如果这是 Angular + jQuery,我会这样做:
$('robotjs-robot-status').scope().$eval("robot")
我可以在 Chrome 中将其输入到开发人员控制台中,然后查看它的内容并进行故障排除。我还可以在 Chrome.
中使用 Batarang 扩展对于 Polymer,我不确定从哪里开始。任何 help/ideas?
如果此处发布的父代码段与代码中显示的完全相同,则可能是问题所在。
<link rel="import" href="robojs-robot-status.html">
应该在外面,比如
<dom-module id="robojs-robot">
<link rel="import" href="robojs-robot-status.html">
<template>
<robojs-robot-status robotname="{{robotname}}"></robojs-robot-status>
</template>
<script>
Polymer({
is: "robojs-robot",
ready: function() {
console.log('setting to Dilly');
this.robotname = "Dilly";
},
properties: {
robotname: {
type: String,
value: "hello"
}
},
});
</script>
</dom-module>
然后如果状态为
<dom-module id="robojs-robot-status">
<template>
<div>Robot Name <span>[[robotname]]</span></div>
</template>
<script>
Polymer({
is: "robojs-robot-status",
properties: {
robotname: {
type: String,
value: "testing",
observer: '_robotnameChanged'
}
},
_robotnameChanged: function(newValue, oldValue) {
console.log('_robotnameChanged: newValue='+newValue+' oldValue='+oldValue)
}
});
</script>
</dom-module>
一切都适合我。
PS:这里似乎不需要属性,因为绑定是单向的。