首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NativeScript绑定中断UI

NativeScript绑定中断UI
EN

Stack Overflow用户
提问于 2016-06-22 08:34:16
回答 1查看 266关注 0票数 0

我已经设置了一个自定义选项卡视图,定义如下:

main.xml

代码语言:javascript
复制
<Page xmlns="http://schemas.nativescript.org/tns.xsd" loaded="loaded" 
xmlns:t1="partial-views/explore"
xmlns:t2="partial-views/community">
<!--ACTION BAR-->
<ActionBar title="Haloose">...</ActionBar>
<StackLayout>
    <!-- TABS -->
    <StackLayout id="sl_main">
        <t1:explore     id="tab_explore"    visibility="{{ currentActive == 'explore' ? 'visible' : 'collapsed' }}" />
        <t2:community   id="tab_community"  visibility="{{ currentActive == 'community' ? 'visible' : 'collapsed' }}"/>
    </StackLayout>
    <-- FIXED MENU -->
    <GridLayout id="menu">
        <Image  tap="changeVisibleTab"/>
        <Image tap="changeVisibleTab" />
    </GridLayout>
</StackLayout>
</Page>

让我们把这个文件称为main.xml。它与main.js相关联,其中我定义了一个绑定上下文:

main.js

代码语言:javascript
复制
exports.loaded = function(args){
    page = args.object;

    //Set Up page view model
    mainObservable = new Observable({
        currentActive:"explore",
        menuItemsArray:[
            new MenuItem("explore"),
            new MenuItem("community")
        ]
    });
    //Bind page to view model
    page.bindingContext = mainObservable;
}

对于每个选项卡,我都有一个包含jscssxml文件的文件夹。示例tab.xml文件如下所示:

tab.xml

代码语言:javascript
复制
<StackLayout loaded="tabLoaded" > <looots of stuff /> </StackLayout>

所有东西都像预期的那样工作,但是如果我试图将堆栈布局绑定到一个对象,那么所有的UI元素都是隐藏的。如果我删除绑定,我可以再次看到它们。

不工作的tab.js

代码语言:javascript
复制
var Observable = require("data/observable").Observable;

var profile;
exports.tabLoaded = function(args){
    profile = args.object;
    var profileBinding = {
        username : "Aaron Ullal"
    }
    profile.bindingContext = profileBinding; //removing this line makes elements visible
}

是什么引起的?也许不支持多级绑定?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-22 10:51:12

当您使用自定义XML组件(如选项卡)并向它们添加绑定(在您的示例中是visibility绑定)时,这些绑定基本上应用于XML组件中的根标记。因此,当您在tab.js中更改绑定上下文时,可见性绑定将开始在profileBinding中寻找一个currentActive属性。为了实现您想要的结果,您必须将选项卡XML封装在另一个布局中,如下所示:

代码语言:javascript
复制
<StackLayout>
    <StackLayout loaded="tabLoaded" > 
        <!--looots of stuff --> 
    </StackLayout>
</StackLayout>

它应该会像预期的那样起作用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37962656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档