我正在进一步探索OpenUI5 / SAPUI5库以显示数据。这次,我尝试加载XML视图,但找不到该文件。这不是一个非常大的问题,但它很令人沮丧,因为它只有在我将视图文件放入特定文件夹时才有效。我搜索并找到一堆教程,提供有关如何组织项目的帮助。我按照上述步骤进行了操作,但它无法正常工作。
我想要实现的目标:将视图文件放在我偏好的文件夹中。
问题:图书馆无法找到这些观点。
到目前为止我做了什么:
我有一个MVC项目(C#+ html)。
在我的视图中(我们称之为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>
我有一个文件夹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
答案 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;
}
});