js中未定义QML元素
QML elements undefined from js
我在从js文件更改元素属性时遇到问题。在我的程序中,我有这种结构的主要元素:
import "main.js" as Main
ApplicationWindow
{
id: applicationWindow
VK {
id: vk
onReplyReady: {
if (typeof document === "string") {
var obj = JSON.parse(document)
console.log(typeof obj.response,typeof obj.count)
Main.processReply(obj.response)
} else {
Debug.log("VK UNKNOWN ERROR")
}
}
}
initialPage: Component { Auth { } }
cover: Qt.resolvedUrl("cover/CoverPage.qml")
}
在组件Auth中,我有一个代码:
Page {
id: messangesPage
Button {
id: mycoolbutton
text: "button"
onClicked: {
vk.getMessanges("lol",0)
}
}
Component.onCompleted: {
vk.getMessanges("lol",0)
}
}
所以我的代码的想法很简单——我有vk对象,它必须是全局的。当我调用vk.getMessanges时,vk会向服务器发送请求,然后发出replyReady信号。在onReplyReady中,我只是解析来自服务器的回复并调用main.js中的函数,我想在其中执行该函数:
function processReply(reply) {
mycoolbutton.text = "mycoolbutton"
}
然而,我得到了一个错误:
main.js:8: ReferenceError: mycoolbutton is not defined
我注意到,如果我从组件Auth调用processReply()函数,那么一切都会很好,但当我从元素applicationWindow调用时,我会出现错误。我试图在applicationWindow中添加属性别名mycolbuttonptr:mycolbutton,但我遇到了另一个错误。那样的话我该怎么办?
您知道每次导入main.js都会实例化一次吗?如果从多个QML文件导入main.js,则会获得main的多个实例,因此,如果在其中一个实例中设置对mycolbutton的引用,则该引用仅在该实例上设置。
如果你只想有一个Main
实例,你必须在带有的JS文件的开头声明它
.pragma library
您无法通过JS文件中的id访问Items。您应该将按钮作为参数传递,例如:
function processReply(reply, btn) {
btn.text = "mycoolbutton"
}
".pragma库"可能会有所帮助,但并不能解决问题。
相关文章:
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 表追加而不附加最后一个元素
- 如何在jQuery中获取元素的形式
- 我可以获得相对于被点击元素的确切点击位置吗
- 在函数中添加数组元素的数值
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 将视口底部滚动到元素底部
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何使用jquery处理php循环通过元素
- js中未定义QML元素
- 从 QML 中的 ListModel 访问 Javascript 数组元素
- 记住 QML 元素中的滚动位置
- 如何从函数外部访问TabView内部的QML元素
- 使用qml键盘处理网页的文本元素