2014-11-24 25 views
2

如何绑定到Javascript资源?绑定到导入的Javascript属性

我是QML的新手,可能正在考虑这种错误的方式,但在下面的例子中,当我按下按钮时,我希望按钮说“世界”。

main.qml

import QtQuick 2.0 
import QtQuick.Controls 1.0 
import "model.js" as Model 


Button { 
    id: button 
    text: Model.text 

    onClicked: { 
     Model.text = "World"; 
     print("Model.text is:", Model.text) 
     print("button.text is:", button.text) 
     // Model.text is "World" 
     // button.text is "Hello" 
     // They should both be "World" 
    } 
} 

model.js

var text = "Hello"; 

我也尝试使用Qt.binding,但它并没有发挥作用。

main.qml

import QtQuick 2.0 
import QtQuick.Controls 1.0 
import "model.js" as Model 


Button {  
    onClicked: { 
     Model.text = "World"; 
    } 

    Component.onCompleted: { 
     text = Qt.binding(function() { return Model.text }) 
    } 
} 

最终的结果我要找的是有一个专门的Javascript资源属性,如窗口高度,色彩和图像路径等,并有取其产品使用它们与对资源所做的任何更改保持同步。

编辑

找到一个相关的问题:declare global property in QML for other QML files

+0

我希望按钮在Javascript属性更新时更新其文本。看我更新的例子。 – 2014-11-25 09:11:52

回答

4

一般情况下,你不能QML属性变量从纯JavaScript绑定模块。 我的建议是使用轻量级QML替代品 - QtObject。您可以添加属性的自定义设置和信号到它,例如:

QtObject { 
    id: mySettings 
    property string iconPath: "./icon.png" 
} 

这个特性以后可以完全按照你想要绑定。

+0

我正在考虑这个问题,对我而言这可能效果不错。如果我真的想把它保留在Javascript领域,也许我甚至可以'mySettings = Qt.createQmlObject(“import QtQuick 2.0; QtObject {}”)'并附上属性? – 2014-11-25 09:06:39

+1

经过一番实验和思考,这一个是一个胜利者。感谢一堆@QRRoS。 – 2014-12-06 12:31:35