我试图了解Backbone.js,Slim PHP和Paris/Idiorm如何协同工作,我在完成流程时遇到了麻烦,从模型属性数据开始,一直到数据库.问题:当我做model.save()时,究竟会发送到我的服务器的是什么?
客户端:Backbone.js
var Donut = Backbone.Model.extend({
defaults: {
name: null,
sparkles: false,
creamFilled: false
},
url: function() {
return '/donut';
}
});
var bostonCream = new Donut({
name: 'Bawston Cream',
sparkles: true,
creamFilled: true
});
bostonCreme.save(); // <-- Problem: Not sure what & format this is sending
Run Code Online (Sandbox Code Playgroud)
我认为以上是我的主要问题.我的理解是,骨干将默认发送POST数据,因为它是新的.它将它发送到路由的/ donut,但我的问题是它发送了什么?以什么格式?我想要的结果是将这些甜甜圈属性保存到我的数据库中.我可以使用jQuery $ .post()将这个服务器端代码传递给json.
var myDonut = {"name":"Jelly Filled", "sparkles":false, "creamFilled":true};
$.post('http://localhost/donut', myDonut);
Run Code Online (Sandbox Code Playgroud)
...并乐意接受它,将其保存到我的数据库中.但是当前设置尝试发送我的主干甜甜圈数据时,我收到POST 500内部服务器错误.下面我有一些服务器端代码.
服务器端:Slim PHP w/Paris
class Donut extends Model {}
$app->post('/donut', function() use …Run Code Online (Sandbox Code Playgroud) 我正在使用一组类别对象,这些对象可以有一个子类别对象数组.棘手的部分是这个嵌套数据的深度是未知的(并且可以改变).(请参阅底部的示例.)我要做的是返回类别对象的"踪迹",但我遇到各种各样的困难.
理想情况下findCategory('b4')会返回:( ['c1', 'd2', 'd3', 'b4']见样本).
我认为我的问题是我在正确分解由递归引起的嵌套循环方面遇到了麻烦.有时我会在我的踪迹中获得额外的类别,或者当我认为我已经爆发时,一些更深层次的嵌套类别最终会出现在路径中.
一个结果可能看起来像这样.显然它不会在b4处杀死循环,我不确定为什么结果被发现两次.
b4
FOUND
["c1", "d2", "d3", "b4"]
e2
FOUND
["c1", "d2", "d3", "b4", "e2"]
Run Code Online (Sandbox Code Playgroud)
如果你还可以给我看一个underscore.js版本的奖金.
JSFiddle链接在这里......
// Start function
function findCategory(categoryName) {
var trail = [];
var found = false;
function recurse(categoryAry) {
for (var i=0; i < categoryAry.length; i++) {
console.log(categoryAry[i].category);
trail.push(categoryAry[i].category);
// Found the category!
if ((categoryAry[i].category === categoryName) || found) {
console.log('FOUND');
found = true;
console.log(trail);
break;
// Did not match...
} else {
// Are …Run Code Online (Sandbox Code Playgroud) 我正在使用文字!使用RequireJS和Firefox的插件似乎讨厌我的文本模板.我的代码似乎在Chrome和Safari中运行得很好.这是我得到的错误.
Error: Load timeout for modules: text!templates/a.html_unnormalized2,
text!templates/b.html_unnormalized3,
text!templates/c.html_unnormalized4, // _unnormalized# <- What is this?
...
text!templates/n.html, // I don't see _unnormalized here... why?
text!templates/o.html,
text!templates/p.html,
...
http://requirejs.org/docs/errors.html#timeout
Run Code Online (Sandbox Code Playgroud)
首先,_unnormalized#是什么意思?它似乎附加到我的一些模板的文件名,但不是全部.但是,我的所有模板都列在错误消息中.
看看Net检查员,它似乎正在下载必要的模板文件.
我从来没有完全理解描述中需要的部分.
.fetchAll()
获取给定的Parse.Object列表.
.fetchAllIfNeeded()如果需要,
获取给定的Parse.Object列表.
在什么情况下我可能会使用它以及究竟是什么决定了需求?我觉得这是超级基本的东西,但我找不到一个令人满意和清晰的定义.
在API的示例中,我注意到fetchAllIfNeeded():
// Objects were fetched and updated.
Run Code Online (Sandbox Code Playgroud)
在成功的同时fetchAll只有:
// All the objects were fetched.
Run Code Online (Sandbox Code Playgroud)
那么fetchAllIfNeeded()节省的东西也是如此吗?这里很困惑.
更新
测试1
在评论中留下@danh留下的一些提示我尝试了以下内容.
var todos = [];
var x = new Todo({content:'Test A'}); // Parse.Object
todos.push(x);
x.save();
// So now we have a todo saved to parse and x has an id. Async assumed.
x.set({content:'Test B'});
Parse.Object.fetchAllIfNeeded(todos);
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,我的客户端x与服务器不同.但是x.hasChanged()因为我们使用了set函数并且触发了change事件,所以它是错误的.fetchAllIfNeeded没有结果.因此,它并不是试图将这与服务器上的同步和提取进行比较.
我注意到在请求有效负载中,运行fetchAllIfNeeded正在发送以下有趣的东西.
{where: …Run Code Online (Sandbox Code Playgroud) 所以我注意到我的应用程序在一些扩展使用后变慢了.特别是当我创建许多视图时,这些视图是长列表中的每个项目.我原以为通过view.remove()删除这些视图有助于解决问题,但是当它们从页面中删除时,我注意到Chrome的时间轴显示我的DOM节点数没有减少.我添加的每个视图都会继续增加这个数量.事实上,似乎唯一减少此节点计数的是页面刷新.
这对我来说感觉不对,我觉得我搞砸了一些非常基本的东西,因为问题似乎发生在我的所有观点而不仅仅是这些观点.这些视图列表的发生速度要快得多,因为它们有很多.
有没有人对我应该寻找什么有任何建议?什么样的原因可以产生这种行为?
我提供代码,但我不知道什么是有用的.
TL; DR - View.remove()正在从页面中删除视图,但我的DOM节点计数继续上升并且永远不会下降.