- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用Angular和Breeze设置SPA。我一直在复数网站上关注John Papa的热毛巾教程。我有一个奇怪的问题,我想可能是我的元数据产生的?但是最后,我不确定。
首先,我的API在LAMP堆栈上运行,所以我没有使用EF。我创建了一个Metadata端点,我认为该端点可以为我提供所需的正确结构。我正在使用breeze.angular.q.js来帮助我从Q映射到$ q
资源:api / v1 / Metadata
{
"metadataVersion": "1.0.5",
"dataServices": [
{
"serviceName": "api/v1/",
"hasServerMetadata": true,
"jsonResultsAdapter": "webApi_default",
"useJsonp": false
}
],
"structuralTypes": [
{
"shortName": "tracks",
"namespace": "MyNamespace",
"dataProperties": [
{
"name": "id",
"nameOnServer": "id",
"maxLength": 36,
"validators": [],
"dataType": "Guid",
"isPartOfKey": true
},
{
"name": "title",
"nameOnServer": "title",
"maxLength": 255,
"validators": [],
"dataType": "String"
},
{
"name": "description",
"nameOnServer": "description",
"maxLength": 0,
"validators": [],
"dataType": "String"
}
]
}
]
}
{
"data": [
{
"id": "495f21d6-adfc-40b6-a41c-fc93d9275e24",
"title": "harum",
"description": "Error doloribus ipsam et sunt fugiat."
},
{
"id": "d7b141d2-6523-4777-8b5a-3d47cc23a0fe",
"title": "necessitatibus",
"description": "Voluptatem odit nulla maiores minima eius et."
}
],
"embeds": [
"courses"
]
}
Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: t in vm.tracks, Duplicate key: object:00I
...
function getTrackPartials() {
...
return EntityQuery.from(entityNames.track)
.toType(entityNames.track)
.using(manager).execute()
.then(querySucceeded, _queryFailed);
function querySucceeded(data) {
console.log(data); // <-- Log out to see what is returned
tracks = data.results;
_areTracksLoaded(true)
log('Retrieved [Track Partials] from remote data source', tracks.length, true);
return tracks;
}
}
JsonResultsAdapter
,因此我可以“按摩”数据。目前,它还很初级,因为我只是想让它正常工作。真正使我失望的是,如果我从
node
中的
visitNode
函数注销
JsonResultsAdapter
参数,它具有正确的数据。
(function () {
'use strict';
var serviceId = 'entityManagerFactory';
angular.module('app').factory(serviceId, ['config', emFactory]);
function emFactory(config) {
breeze.config.initializeAdapterInstance('modelLibrary', 'backingStore', true);
breeze.NamingConvention.camelCase.setAsDefault();
var serviceName = config.remoteServiceName;
var metadataStore = new breeze.MetadataStore();
var provider = {
metadataStore: metadataStore,
newManager: newManager
};
var jsonResultsAdapter = new breeze.JsonResultsAdapter({
name: "Tracks",
extractResults: function(json) {
console.log(json.results.data); // <-- Log out to see what is returned
return json.results.data;
},
visitNode: function(node, mappingContext, nodeContext) {
console.log(node); // <-- Log out to see what is returned
return {
entityType: 'tracks',
nodeId: node.id
};
}
});
var dataService = new breeze.DataService({
serviceName: serviceName,
jsonResultsAdapter: jsonResultsAdapter
});
return provider;
function newManager() {
var mgr = new breeze.EntityManager({
dataService: dataService,
metadataStore: metadataStore
});
return mgr
}
}
})();
bower-breeze-angular git://github.com/eggers/bower-breeze-angular.git
程序包,而不是默认的微风
breeze git://github.com/IdeaBlade/Breeze.git
,该微风充斥了示例和其他我不希望打包到存储库中的数据。
JsonResultsAdapter::visitnode
回调返回之后,它需要“
merge”我的数据,我遇到的问题是从节点返回的
entityKey不匹配。这是因为我
mappingContext
中的
rawValueFn正在寻找
nameOnServer
,我以为我是从服务器中的元数据中设置的-但是以某种方式注销数据属性时,它与我设置的内容有所不同。
JsonResultsAdapter
中更新我的mappingContext上的rawValueFn函数来解决此问题,并且一切都会正常进行-但这感觉像是“黑客”。我也尝试过使用“ NamingConvention”游戏,但这似乎也不起作用。
var jsonResultsAdapter = new breeze.JsonResultsAdapter({
name: "Tracks",
extractResults: function(json) {
return json.results.data;
},
visitNode: function(node, mappingContext, nodeContext) {
// Had to adjust this so it would lowercase and correctly match
mappingContext.rawValueFn = function(rawEntity, dp) {
name = dp.name;
name.substring(0, 1).toLowerCase() + name.substring(1);
return rawEntity[name];
}
return {
entityType: 'tracks'
};
}
});
最佳答案
哇,这是一个很长的问题。
首先,我建议您查看"Metadata by hand"主题,该主题描述了使用Breeze Labs元数据帮助器定义元数据的更简单方法。这将减少很多繁琐的工作,并使阅读和理解更加清晰。
其次,不要在您的元数据中指定“ jsonResultsAdapter”。在我看来,实际上是您想要将元数据固定到WebAPI适配器时。请勿在元数据中指定“ namingConvention”,因为这会胜过您在其他地方设置的内容。鉴于您没有从服务器获取元数据,如果您根本不想设置它,则“ hasServerMetadata”应为false
。
第三,坚持客户端名称,而忽略“ nameOnServer”。 NamingConvention
还是要粉碎它。
第四,如果(如所显示的)客户端和服务器端属性名称均为驼峰式,请不要更改NamingConvention
默认值!您不需要任何翻译。默认不翻译。
如果我对此表示正确,请不要将NamingConvention
更改为camelCase! “ camelCase”约定告诉Breeze“服务器是PascalCase,因此将我的客户端骆驼案例属性名称转换为服务器上的Pascal名称”。如果我理解正确,那么您不希望客户端“ id”成为服务器端“ Id”……这将发生。这就是为什么(我相信)您将“ Id”视为“ nameOnServer”。
第五,在JsonResultsAdapter
中,节点名称与服务器中的JSON匹配,因此是服务器端名称。保持这种方式。 NamingConvention将节点属性值转换为实体属性值时,会将其转换为客户端名称。实际上,如果错误地在节点上使用客户端名称,则会丢失数据。
从服务器到达JSON时,您是否需要在JSON中更改属性名称和值?如果没有,请不要在您的visitNode
方法中弄混那些名称。关于您要做的所有事情就是确保为节点标识正确的EntityType
并将其返回到结果中。
第六,我很确定visitNode
结果的“ entityType”属性必须是实际的EntityType
,而不是示例中显示的类型名称。你不能说
return {
entityType: 'tracks',
};
return {
entityType: trackType,
};
EntityType
获取
MetadataStore
。
Track
的主键值。这不是您的情况下的
node.id
吗?如果我是对的,那就不要那样做。 “ nodeId”不是您实体的PK。它是使用循环序列化实体图的标记。
NamingConvention
,除非您确实确实需要在客户端到服务器之间更改属性名称的拼写。
EntityType
,而不是类型的名称。
rawValueFn
这样的微风函数;你会打破微风,你将不知道如何或为什么。
关于javascript - Breeze EntityQuery缺少返回的EntityTypes中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21744838/
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
在编码时,我问了自己这个问题: 这样更快吗: if(false) return true; else return false; 比这个? if(false) return true; return
如何在逻辑条件下进行“返回”? 在这样的情况下这会很有用 checkConfig() || return false; var iNeedThis=doSomething() || return fa
这是我的正则表达式 demo 如问题所述: 如果第一个数字是 1 则返回 1 但如果是 145 则返回 145 但如果是 133 则返回 133 样本数据a: K'8134567 K'81345678
在代码高尔夫问答部分查看谜题和答案时,我遇到了 this solution返回 1 的最长和最晦涩的方法 引用答案, int foo(void) { return! 0; } int bar(
我想在下面返回 JSON。 { "name": "jackie" } postman 给我错误。说明 Unexpected 'n' 这里是 Spring Boot 的新手。 1日龄。有没有正确的方法来
只要“is”返回 True,“==”不应该返回 True 吗? In [101]: np.NAN is np.nan is np.NaN Out[101]: True In [102]: np.NAN
我需要获取所有在 6 号或 7 号房间或根本不在任何房间的学生的详细信息。如果他们在其他房间,简单地说,我不希望有那个记录。 我的架构是: students(roll_no, name,class,.
我有一个表单,我将它发送到 php 以通过 ajax 插入到 mysql 数据库中。一切顺利,php 返回 "true" 值,但在 ajax 中它显示 false 消息。 在这里你可以查看php代码:
我在 Kotlin 中遇到了一个非常奇怪的无法解释的值比较问题,以下代码打印 假 data class Foo ( val a: Byte ) fun main() { val NUM
请注意,这并非特定于 Protractor。问题在于 Angular 2 的内置 Testability service Protractor 碰巧使用。 Protractor 调用 Testabil
在调试窗口中,以下表达式均返回 1。 Application.WorksheetFunction.CountA(Cells(4 + (i - 1) * rows_per_record, 28) & "
我在本地使用 jsonplaceholder ( http://jsonplaceholder.typicode.com/)。我正在通过 extjs rest 代理测试我的 GET 和 POST 调用
这是 Postman 为成功调用我的页面而提供的(修改后的)代码段。 var client = new RestClient("http://sub.example.com/wp-json/wp/v2
这个问题在这里已经有了答案: What to do with mysqli problems? Errors like mysqli_fetch_array(): Argument #1 must
我想我对 C 命令行参数有点生疏。我查看了我的一些旧代码,但无论这个版本是什么,都会出现段错误。 运行方式是 ./foo -n num(其中 num 是用户在命令行中输入的数字) 但不知何故它不起作用
我已经编写了一个类来处理命名管道连接,如果我创建了一个实例,关闭它,然后尝试创建另一个实例,调用 CreateFile() 返回 INVALID_HANDLE_VALUE,并且 GetLastErro
即使 is_writable() 返回 true,我也无法写入文件。当然,该文件存在并且显然是可读的。这是代码: $file = "data"; echo file_get_contents($fil
下面代码中的变量 $response 为 NULL,尽管它应该是 SOAP 请求的值。 (潮汐列表)。当我调用 $client->__getLastResponse() 时,我从 SOAP 服务获得了
我一直在网上的不同论坛上搜索答案,但似乎没有与我的情况相符的... 我正在使用 Windows 7,VS2010。 我有一个使用定时器来调用任务栏刷新功能的应用程序。在该任务栏函数中包含对 LoadI
我是一名优秀的程序员,十分优秀!