小编Jon*_*lls的帖子

将返回的JSON对象属性转换为(较低的第一个)camelCase

我从这样的API返回JSON:

Contacts: [{ GivenName: "Matt", FamilyName:"Berry" }]
Run Code Online (Sandbox Code Playgroud)

为了保持这与我的代码样式(camelCase - 小写首字母)一致,我想转换数组以产生以下内容:

 contacts: [{ givenName: "Matt", familyName:"Berry" }]
Run Code Online (Sandbox Code Playgroud)

什么是最简单/最好的方法?创建一个新的Contact对象并迭代返回的数组中的所有联系人?

var jsonContacts = json["Contacts"],
    contacts= [];

_.each(jsonContacts , function(item){
    var contact = new Contact( item.GivenName, item.FamilyName );
    contacts.push(contact);
});
Run Code Online (Sandbox Code Playgroud)

或者我可以映射原始或以某种方式转换它?

javascript jquery json underscore.js

54
推荐指数
8
解决办法
5万
查看次数

jQuery Deferreds的异步循环(承诺)

我想创造我认为被称为"瀑布"的东西.我想顺序处理一系列异步函数(jQuery promises).

这是一个人为的例子:

function doTask(taskNum){
    var dfd = $.Deferred(), 
        time = Math.floor(Math.random()*3000);

    setTimeout(function(){
        console.log(taskNum);
        dfd.resolve();
    },time)

    return dfd.promise();
}

var tasks = [1,2,3];

for (var i = 0; i < tasks.length; i++){
    doTask(tasks[i]);
}

console.log("all done");
Run Code Online (Sandbox Code Playgroud)

我希望它按照它们执行的顺序完成任务(存在于数组中).因此,在这个例子中,我希望它执行任务1并等待它解决然后执行任务2等待它解决,执行任务3等并且日志"全部完成".

也许这是非常明显的,但我一直试图在整个下午解决这个问题.

javascript jquery waterfall jquery-deferred

21
推荐指数
4
解决办法
1万
查看次数

使用下划线groupby按颜色分组汽车数组

我有一系列汽车.

car = {
    make: "nissan",
    model: "sunny",
    colour: "red"
};
Run Code Online (Sandbox Code Playgroud)

我如何使用underscore.js按颜色对数组进行分组?

我已经尝试了几个组合,但我不确定如何指定我的迭代器条件:

var carsGroupedByColor = _.groupBy(cars, false, colour);
var carsGroupedByColor = _.groupBy(vars, false, function(cars){ return cars[colour]; };
Run Code Online (Sandbox Code Playgroud)

它们每次都返回数组中的所有内容.

javascript iterator underscore.js

15
推荐指数
2
解决办法
6万
查看次数

JQuery延期.使用$ .when和.progress()

我正在编写一个充斥着异步任务的解析器.我使用JQuery promises来控制和排序异步任务.这是构造函数的伪代码版本:

   /**
     * @constructor
     */
    function Parser(json)
    {   
        return $.when(
            this.delete().then(this.insert(json)),
            this.doSomething(),
            this.doSomethingElse().then(this.update(json))
        ) 
    };
Run Code Online (Sandbox Code Playgroud)

这是一个示例函数的样子:

Parser.prototype.doSomething = function()
{   
    var dfd = $.Deferred();

    exampleTask(dfd.reject, dfd.resolve);

    return dfd.promise();
};
Run Code Online (Sandbox Code Playgroud)

来自JQuery文档:

在将多个Deferred对象传递给jQuery.when的情况下,该方法从新的"master"Deferred对象返回Promise,该对象跟踪已传递的所有Deferred的聚合状态

如何使用.progress()通知任何关心Parser整体进度的人?例如

var parser = new Parser(json);
parser.progress(function(prog){console.log(prog});
Run Code Online (Sandbox Code Playgroud)

这是我想要做的事情的小提琴:http: //jsfiddle.net/ashanova/RjULA/2/

javascript jquery progress jquery-deferred

15
推荐指数
1
解决办法
8551
查看次数

在Android帐户管理器中存储其他数据

我想使用android AccountManager来同步我的webservice和应用程序(联系人和calander的标准同步)但是,AccountManager似乎只存储用户名和密码.我的Web服务需要三个凭据:用户名,密码和帐户.存储第三条信息的最佳做法是什么?

android accountmanager

14
推荐指数
1
解决办法
1万
查看次数

Jquery承诺链

我有一个简单的事件链:

  1. 从metaData表中获取列(异步)
  2. 加载选定的列(异步)
  3. 渲染列表

我曾经只是链接这些函数,每个函数在完成后调用下一个函数.然而,它不是很明显(getColumnsFromMeta正在填充视图中的结果).因此,为了清晰和重复使用代码,我想重构这些JQuery Promises.我以前用过承诺.但是我如何连锁超过两个?getColumnsFromMeta ().then(loadSourceFromDatabase /*some arguments*/) //.then(renderList)?;

这是一个例子getColumnsFromMeta:

var getColumnsFromMeta = function(id)
{
    var sql,
        dfd;

    dfd = $.Deferred();

    var onSuccess = function(tx, result)
    {
        var columns = [];

        for (var i = 0; i < result.rows.length; i++) 
        {
            columns.push(result.rows.item(i).Column);
        }

        dfd.resolve(columns);
    };

    var onError = function(tx, error)
    {
        dfd.reject(error);
    };

    sql = "SELECT Column FROM Meta WHERE id = ?";

    database.query(sql, [id], onSuccess, onError);

    return dfd.promise();
};
Run Code Online (Sandbox Code Playgroud)

javascript jquery jquery-chaining promise jquery-deferred

13
推荐指数
1
解决办法
1万
查看次数

jQuery等待多个事件触发

在执行函数之前是否可以"等待"多个事件?我知道可能用jQuery deferredobejcts $.when等待两个承诺来解决,但我想知道它是否可能只是简单的旧事件?

假设点击事件和自定义事件触发警报,例如:

$.when("click", "customEvent").then(function(){ alert("yay"); });
Run Code Online (Sandbox Code Playgroud)

javascript jquery jquery-deferred

13
推荐指数
1
解决办法
3971
查看次数

JQuery触发自定义事件会导致错误

我有一个人对象,我基本上希望它能够发出自己的事件.但是,如果触发事件与原型具有相同的名称,则Chrome会打印出相当大的错误.在下面的代码示例中, person.murder触发murder将错误写入控制台的事件.(代码更有意义).

function Person() {

}

Person.prototype.murder = function() {
   $(this).trigger("murder");
}
Run Code Online (Sandbox Code Playgroud)

我像这样调用触发器

var barry = new Person();
$(barry).on("murder", function(){
   alert("I am so angry");
})

barry.murder();
Run Code Online (Sandbox Code Playgroud)

因此谋杀巴里导致错误,但是如果事件是这样的事情personDied,那么没有错误.我是否正确地触发了事件?我只是想毫无错误地杀人.

有时会返回错误的崩溃<error>,有时甚至

未捕获RangeError:超出最大调用堆栈大小

javascript jquery javascript-events eventemitter

9
推荐指数
1
解决办法
1172
查看次数

如何比较同一个表中的两列?

我想比较同一个表中的两列.我希望能够返回两列具有相同值的所有行.

我正在寻找类似的东西SELECT * FROM FOO WHERE C1 = C4.

因此,在下面的示例中,我将只返回第一行:

C1    || C2  || C3  || C4
--------------------------
1     || a   || b   || 1
2     || a   || b   || 4
3     || b   || d   || 2
4     || b   || d   || 2
Run Code Online (Sandbox Code Playgroud)

如果重要,我正在使用SQLite(更具体地说WebSQL).

sql

8
推荐指数
1
解决办法
4万
查看次数

嵌套jQuery $ .when

基本上我是想写这个:

var async1 = $.when( a1() ).then(function(){ a2() });
var async2 = $.when( a3() ).then(function(){ a4() });

$.when(async1, async2).then(function(){ 
    console.log("complete");
}); 
Run Code Online (Sandbox Code Playgroud)

但是当a1和a3执行时,该函数认为自己已经解决了.

我把相同的例子放在一个小提琴中:http://jsfiddle.net/Z7fzR/

javascript jquery jquery-deferred

7
推荐指数
2
解决办法
2995
查看次数