【问题标题】:Modifying widgets in an alloy project修改合金项目中的小部件
【发布时间】:2014-04-28 16:35:20
【问题描述】:

我有一个小部件,它是一个照片库。它的基本功能意味着它只允许用户单击缩略图,然后在 onclick 事件时放大/缩小。

我需要展开小部件,以便有一个按钮允许用户相应地更改他们的个人资料图片(如果他们选择了该图片)。

下面是代码在 widget.js 中的默认外观:

var topView = Ti.UI.createView({
    width:Ti.UI.FILL,
    height: Ti.UI.FILL,
    zIndex:1200,
    visible:false
});

// this gets image , adds it to top view
var imgView = Ti.UI.createImageView({
    image: url,
    width:Ti.UI.SIZE,
    height: Ti.UI.SIZE
});

//add it
topView.add(imgView);

现在要添加一个按钮,我可以在 widget.js 中添加以下内容:

var button = Titanium.UI.createButton({
    title : 'Use Picture',
    top : 10,
    width : 100,
    height : 50
}); 

button.addEventListener('click', function(e) {
    Alloy.Global.Image = url;
});

topView.add(button);

这将关闭弹出窗口并通过将其放入全局变量中返回该图像的 url。然后我可以使用它并通过在相关控制器中调用它来将我的图片更改为新图片。

问题是,扩展 widget.js 代码的最佳方式是什么?以这种方式使用全局变量是最好的方式吗?

【问题讨论】:

    标签: javascript titanium titanium-alloy titanium-widgets


    【解决方案1】:

    我经常使用自定义小部件做的是添加回调,这样您就可以直接返回值。

    widget.xml

    <Alloy>
        <Button title="Click me!" onTouchend="buttonClicked" />
    </Alloy>
    

    widget.js

    // This will hold our callback
    var onClickCallback;
    
    // The button has been clicked, call callback
    function buttonClicked(e) {
        if(typeof(onClickCallback) === 'function') {
            onClickCallback({ type:'clicked!' }); }
       }
    }
    
    // Assign our callback
    function onClick(callback) {
        onClickCallback = callback;
    }
    
    // Make the onClick function public
    exports.onClick = onClick;
    

    index.xml

    <Alloy>
        <Window>
            <Widget id="myWidget" src="myWidget" />
        </Window>
    </Alloy>
    

    index.js

    // Now we can intercept the click within the widget
    // and use the values passed
    $.myWidget.onClick(function(e) {
        alert(e.type);
    });
    

    【讨论】:

    • 谢谢,直接编辑小部件,添加按钮其他ui功能的好方法是正确的做事方式吗?我担心通过这种方式,我最终可能会将小部件变成非通用但特定的东西 - 使其更难重用。
    • 我不明白您为什么不应该编辑小部件本身。您可以自己决定要保留多少小部件或制作“多用途”,这是可定制的。但是请注意:我已经编写了大型模块来涵盖人们可以想到的每个用例,只是发现自己只使用了它的一些功能......时间就是金钱;)有了这个答案,我更想说明如何接收在不使用 Alloy.Globals 的情况下从您的小部件获得反馈,我认为这是不好的做法。
    • 我明白了,我可能不得不重用它,即没有按钮,有没有办法可以扩展小部件并添加额外的 ui 功能?
    • 复制/粘贴并重命名小部件文件夹中的小部件。也相应地更改widget.json 中的名称和版本。将您的小部件添加到您的应用程序 config.json 的依赖项中。现在根据您的需要修改您的小部件。
    • 顺便说一句,如果你不介意 mwfire - 你能帮我看看这个问题吗stackoverflow.com/questions/23430778/…。干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多