如何从根目录导航,尤其是一个或多个级别上/下

时间:2016-11-21 15:19:02

标签: view root sapui5

我正在进一步探索OpenUI5 / SAPUI5库以显示数据。这次,我尝试加载XML视图,但找不到该文件。这不是一个非常大的问题,但它很令人沮丧,因为它只有在我将视图文件放入特定文件夹时才有效。我搜索并找到一堆教程,提供有关如何组织项目的帮助。我按照上述步骤进行了操作,但它无法正常工作。

我想要实现的目标:将视图文件放在我偏好的文件夹中。

问题:图书馆无法找到这些观点。

到目前为止我做了什么:

  1. 我有一个MVC项目(C#+ html)。

  2. 在我的视图中(我们称之为ViewName.cshtml)我有以下内容:

    <script id='sap-ui-bootstrap'
        src='@Url.Content("~/Scripts/OpenUI5/sap-ui-core.js")'
        data-sap-ui-theme='sap_bluecrystal'
        data-sap-ui-libs='sap.m,sap.ui.commons,sap.ui.table'
        data-sap-ui-compatversion='edge'
        data-sap-ui-preload='async'
        data-sap-ui-resourceroots='{
            "sap.views": "./"
        }'>
    </script>
    
    //...
    
    @* Trying to load the xml view *@
    <script>
        sap.ui.getCore().attachInit(function () {
            new sap.ui.xmlview({
                viewName: "sap.views.A1"
            }).placeAt("testView");
        });
    </script>
    
  3. 我有一个文件夹Views,它包含文件夹OpenUI5,它包含两个东西--ViewName.cshtml和一个名为&#39; view&#39;的文件夹。进入该文件夹&#39; view&#39;,我有A1.view.xml,它很简单:

    <mvc:View
        xmlns="sap.m"
        xmlns:mvc="sap.ui.core.mvc">
        <Text text="Hello!" />
    </mvc:View>
    

    在文档中,他们说,

        data-sap-ui-resourceroots='{
            "sap.views": "./"
        }'
    

    替换params对象的viewName属性中的sap.views,给定新的sap.ui.xmlview(),用你定义的代替&#39; ./'如果你写&#39; ./',那么你的意思是&#34;根目录&#34;。

    这是主要问题和误解。他们说,在那些教程和文档中的任何地方,根目录都是一个,它保存你的html页面index.html。所以,我想,在我的情况下,根目录应该是OpenUI5文件夹,它包含ViewName.cshtml。我尝试将其重命名为index.cshtml,这根本没有效果。

    我发现根目录实际上是sap-ui-core.js所在的目录。我通过删除数据-sap-ui-resourceroots =&#39;&#39;来测试并得出了这个结论。来自脚本标记,它初始化库并命名我的视图只是A1:

    sap.ui.getCore().attachInit(function () {
        new sap.ui.xmlview({
            viewName: "A1"
        }).placeAt("testView");
    });
    

    现在,如果A1.view.xml位于sap-ui-core.js所在的文件夹中,则会找到并呈现它。

    我试图将A1.view.xml放入子文件夹&#39; sap&#39; sap-ui-core.js所在的文件夹,并按如下方式呈现:

        sap.ui.getCore().attachInit(function () {
            new sap.ui.xmlview({
                viewName: "sap.A1"
            }).placeAt("testView");
        });
    

    再一次,它正在发挥作用。

    我的问题:如何升级?在视图中说,我将文件夹作为兄弟添加到文件夹OpenUI5(其中包含ViewName.cshtml),它被称为OpenUI5XmlViews,其中我把A1.view.xml。

    sap-ui-core.js位于Scripts / OpenUI5 /中,文件夹Scripts是文件夹Views的兄弟。牢记这一切,为了工作,我希望能够做到这样的事情:

    <script id='sap-ui-bootstrap'
        src='@Url.Content("~/Scripts/OpenUI5/sap-ui-core.js")'
        data-sap-ui-theme='sap_bluecrystal'
        data-sap-ui-libs='sap.m,sap.ui.commons,sap.ui.table'
        data-sap-ui-compatversion='edge'
        data-sap-ui-preload='async'
        data-sap-ui-resourceroots='{
            "sap.xmlviews": "../../../Views/OpenUI5XmlViews"
        }'>
    </script>
    
        sap.ui.getCore().attachInit(function () {
            new sap.ui.xmlview({
                viewName: "sap.xmlviews.A1"
            }).placeAt("testView");
        });
    

    我认为这应该产生路径/Views/OpenUI5XmlViews/A1.view.xml,但事实并非如此。请帮我怎么实现呢?谢谢。

    编辑:以下是我在浏览器控制台中收到的错误信息:

    Uncaught (in promise) Error: resource sap/views/A1.view.xml could not be loaded from ../../../Views/OpenUI5XmlViews/A1.view.xml. Check for 'file not found' or parse errors. Reason: Not Found
    

    也不像这样:

    Uncaught (in promise) Error: resource sap/views/A1.view.xml could not be loaded from ./././Views/OpenUI5XmlViews/A1.view.xml. Check for 'file not found' or parse errors. Reason: Not Found
    

2 个答案:

答案 0 :(得分:0)

您正在定义一个资源根目录:

data-sap-ui-resourceroots='{
        "sap.xmlviews": "../../../Views/OpenUI5XmlViews"
 }'>

所以你定义了一种namspace&#34; sap.xmlviews&#34;它指向相对于index.html文件的文件夹路径。这与你的sap-ui-core.js framewrok路径无关。

因此,如果您从定义的ressourceroot尝试查看A.view.xml,则必须编写类似sap.xmlviews.A的内容。请看这个例子:https://sapui5.netweaver.ondemand.com/sdk/#docs/guide/1409791afe4747319a3b23a1e2fc7064.html

答案 1 :(得分:0)

好的,

我不知道你在做什么,但是一个好的实践是使用mvc模式创建你的目录树:

<script id='sap-ui-bootstrap'
    src='@Url.Content("~/Scripts/OpenUI5/sap-ui-core.js")'
    data-sap-ui-theme='sap_bluecrystal'
    data-sap-ui-libs='sap.m,sap.ui.commons,sap.ui.table'
    data-sap-ui-compatversion='edge'
    data-sap-ui-preload='async'
    data-sap-ui-resourceroots='{
        "sap.myapp": "./"
    }'>
</script>

并为根文件夹设置名称空间:

sap.ui.getCore().attachInit(function () {
        new sap.ui.xmlview({
            viewName: "sap.myapp.view.A1"
        }).placeAt("testView");
    });

所以你可以在index.html中调用你的视图:

spinner.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_UP) {
                v.performClick();
            }
            return true;
        }
    });