(很高兴接受Swift或Objective-C的答案)
我的表视图有几个部分,当按下一个按钮时,我想在第0部分的末尾插入一行.再次按下该按钮,我想删除同一行.我几乎工作的代码看起来像这样:
// model is an array of mutable arrays, one for each section
- (void)pressedAddRemove:(id)sender {
self.adding = !self.adding; // this is a BOOL property
self.navigationItem.rightBarButtonItem.title = (self.adding)? @"Remove" : @"Add";
// if adding, add an object to the end of section 0
// tell the table view to insert at that index path
[self.tableView beginUpdates];
NSMutableArray *sectionArray = self.model[0];
if (self.adding) {
NSIndexPath *insertionPath = [NSIndexPath indexPathForRow:sectionArray.count inSection:0];
[sectionArray addObject:@{}];
[self.tableView insertRowsAtIndexPaths:@[insertionPath] withRowAnimation:UITableViewRowAnimationAutomatic];
// if removing, remove the …Run Code Online (Sandbox Code Playgroud) 我认为我一直在错误地使用npm,大多数时候全局安装(使用-g)而不是本地安装(使用-save).现在我有一长串全局包,我希望/应该清理它们.
(**我是新手,除了OCD整洁之外,我不想在没有明确提及它的情况下意外地在应用程序中使用包,否则在某个地方部署它可能会成为一个难题.).
我知道我可以npm uninstall <package> -g 用来做实际删除,但我该如何决定应该留下什么? 有一个名为"cuddly-bunny@1.2.3"之类的looong列表等等.
有没有办法确定一个项目是否正在使用它,或者它是否是全球需要的东西?这将是一个漫长的一天去每个人的文档.或者也许有一条经验法则,例如:"一个人通常需要x,y和z,你可以删除其余部分"?
此外,一旦我有一个删除列表,我唯一的选择是逐个执行所有这些unistall -g命令?
我正在尝试使用passport-jwt设置JWT身份验证.我想我采取了正确的步骤,但测试GET不会成功,我不知道如何调试它.
这就是我所做的:
尽可能直接设置passport-jwt
var jwtOptions = {
secretOrKey: 'secret',
issuer: "accounts.examplesoft.com", // wasn't sure what this was, so i left as defaulted in the doc
audience: "yoursite.net" // wasn't sure what this was, so i left as defaulted in the doc
};
jwtOptions.jwtFromRequest = ExtractJwt.fromAuthHeader();
passport.use(new JwtStrategy(jwtOptions, function(jwt_payload, done) {
User.findOne({id: jwt_payload.sub}, function(err, user) {
if (err) {
return done(err, false);
}
if (user) {
done(null, user);
} else {
done(null, false);
// or you could create …Run Code Online (Sandbox Code Playgroud)我的服务需要异步检索一个值,但是一旦我拥有它,我想使用该值的缓存版本.
当两个控制器调用此服务时,我希望第一个控制器缓存检索到的值,第二个控制器使用缓存值,但根据日志,我从未找到缓存值.当它运行时,我看到一条日志消息,显示正在缓存的值,然后,当我按照一个角度路由到另一个控制器时,我没有看到服务找到缓存的值.为什么它没有按照我的期望运行**?**
angular.module('myApp.services').factory('Config', function() {
var Config = { };
Config.currentYear = function() {
if (Config._currentYear) {
// sadly, we never execute here
console.log("returning cached year");
return Parse.Promise.as(Config._currentYear);
}
return Parse.Config.get().then(function(config) {
console.log("caching year");
Config._currentYear = config.get("currentYear");
return Config._currentYear;
});
};
return Config;
});
Run Code Online (Sandbox Code Playgroud)
一些注意事项:(1)我将缓存的属性命名为_currentYear,添加下划线以避免与函数名冲突.不确定我是否需要这样做.(2)当缓存值时,我返回一个履行的承诺,因此函数总是返回一个promise ...也不确定是否需要它,但认为它不会受到伤害.
javascript promise angularjs parse-platform angularjs-service
尝试一些 iOS 编程,我使用 NSUserDefaults 来保存我的应用程序需要的几个 NSNumbers。我正在使用典型的代码来获取和设置值,例如
- (NSNumber *)myUserDefaultNumber {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
return [defaults objectForKey:@"XYZ_MyNumber"];
}
Run Code Online (Sandbox Code Playgroud)
但我不知道的是运行时成本。我可以像普通的 getter 一样使用它,在我需要像 那样的值时调用它[self myUserDefaultNumber];,可能经常吗?
或者是否有足够的额外成本来激励我进行缓存,例如:
// setup a property called myUserDefaultNumber, and
- (NSNumber *)myUserDefaultNumber {
if (!_myUserDefaultNumber) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
_myUserDefaultNumber = [defaults objectForKey:@"XYZ_MyNumber"];
}
return _myUserDefaultNumber;
}
Run Code Online (Sandbox Code Playgroud)
我知道我不应该过早优化,但一开始就做明显愚蠢的事情也是错误的。我的第一种方法比简单的记忆差多少?(关于 setter 的同样问题,它可能更贵)。
我已经能够使用JWT战略实施护照,而且效果很好.我受jwt保护的路线看起来像这样......
app.get('/thingThatRequiresLogin/:id', passport.authenticate('jwt', { session: false }), thingThatRequiresLogin.findById);
Run Code Online (Sandbox Code Playgroud)
现在我需要将某些内容的访问限制为仅属于某个角色的登录用户.我希望我能像这样表达:
app.get('/thingThatRequiresLogin/:id', MAGIC, thingThatRequiresLogin.findById);
Run Code Online (Sandbox Code Playgroud)
哪里 MAGIC = require logged-in users, but only those with role x or y
node_acl似乎是一个很好的解决方案,我理解它到了一定程度,但后来我在doc中找到了这个...
我们可以保护这样的资源:
app.put('/blogs/:id', acl.middleware(), function(req, res, next){…}
Run Code Online (Sandbox Code Playgroud)
中间件将保护req.url命名的资源,从req.session.userId中选择用户并检查req.method的权限,因此上述内容将等同于:
我如何将其与我的jwt策略混合使用?我唯一的想法是放弃node_acl middleware,而是将acl检查代码添加到我的jwt策略中.但那就是我遇到麻烦的地方.我的jwt函数看起来像这样:
passport.use(new JwtStrategy(jwtOptions, function(jwt_payload, done) {
User.findOne({id: jwt_payload.sub}, function(err, user) {
if (err) {
return done(err, false);
}
if (user) {
done(null, user);
} else {
done(null, false);
// or you could create a new account
}
});
}));
Run Code Online (Sandbox Code Playgroud)
根据node_acl,我可以问这样的事情......
acl.isAllowed('jsmith', 'blogs', ['edit','view','delete']) …Run Code Online (Sandbox Code Playgroud) 我知道我会在这结束时感到愚蠢,但我一直在努力...
if (user._id == req.params.id) {
console.log("match");
} else {
console.log("'" + user._id + "' does not match '" + req.params.id + "'");
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,比较两个相同的字符串并找到匹配项.但是我的jshint告诉我使用这个===我理解的运算符(从这里)来表示类型也被检查.
替换===我的测试失败,生成控制台输出,如;
'56e0a2085b89105924963dc3'与'56e0a2085b89105924963dc3'不符
我认为滴答声'证明两端都没有空格.该文章表明类型不匹配或其中一个字符串是使用new String构造函数创建的,但我不控制生成这些字符串的代码.我该怎么办?
我正在创建一个矩阵类(将在react应用中使用),我想以此方式定义它:
class Matrix extends Object {
constructor(r, c) {
super();
this.rows = new Array(r);
for (var i=0; i<r; i++) {
this.rows[i] = new Array(c);
}
this.assign((v,i,j) => (i===j)? 1:0); // ERROR HERE
}
assign(f) {
for (var i=0; i<this.rows.length; i++) {
for (var j=0; j<this.rows[i].length; j++) {
this.rows[i][j] = f(this.rows[i][j], i, j);
}
}
}
// and so on
Run Code Online (Sandbox Code Playgroud)
这可以通过webpack编译,但是在运行时,我在chrome控制台中收到一个错误,提示_this.assign不是function。
我可以这样工作:
constructor(r, c) {
super();
this.rows = new Array(r);
for (var i=0; i<r; i++) {
this.rows[i] = new …Run Code Online (Sandbox Code Playgroud) 我已经安装了react-bootstrap,并证明我可以使用网格组件,这是我的主要需求。但是,为什么找不到“容器”,我应该如何包装最外面的内容,以使页面具有页边距以及通常由引导程序设置的其他内容?
我知道我可以使用常规CSS,但(a)容器不能更干净以匹配其中的引导程序,以及(b)除边距之外还有什么其他内容可以包装所有内部内容,并且仍然可以正常工作好?
我一直在学习Node/Javascript,从一开始就使用promises(我不知道如何不使用promises,并且常常想知道其他人如何在没有它们的情况下相处).
因此,我有时需要"宣传"简单的内容,例如阅读文件fs:
var readFile = function(path) {
return new Promise(function(fulfill, reject) {
fs.readFile(path, function(err, data) {
if (err) { reject(err); }
else { fulfill(data); }
});
});
};
Run Code Online (Sandbox Code Playgroud)
这一直很有效.现在我需要做同样的事情superagent,但它使用的链式风格让我陷入困境.
var request = require('superagent');
request.get(...).set(...).set(...).end(callback); // stuck!
Run Code Online (Sandbox Code Playgroud)
我想end()用一个返回promise 的方法替换方法(或忽略它并添加一个新方法).像这样......
var endQ = function() {
return new Promise(function(fulfill, reject) {
this.end(function(err, res) { // "this" is the problem!
if (err) { reject(err); }
else { fulfill(res); }
});
});
};
// then I could …Run Code Online (Sandbox Code Playgroud) javascript ×6
node.js ×4
ios ×2
passport.js ×2
promise ×2
reactjs ×2
acl ×1
angularjs ×1
express ×1
npm ×1
objective-c ×1
superagent ×1
uitableview ×1
webpack ×1