我想将键值对作为参数传递给Backbone路由,并希望在调用映射函数之前将其反序列化为javascript对象.
var MyRouter = Backbone.Router.extend({
routes: {
"dashboard?:params" : "show_dashboard"
},
show_dashboard: function(params){
console.log(params);
}
});
Run Code Online (Sandbox Code Playgroud)
当我转到"http://...#dashboard?key1 = val1&key2 = val2"时,应在控制台上打印{key1:"val1",key2:"val2"}.
我目前在每个映射函数中使用jQuery BBQ的$ .deparam方法来获取反序列化的对象.如果我可以扩展路由器并将其定义一次就可以了,因此可以在所有映射函数中作为对象访问params.什么是干净的方式来做到这一点?这有什么陷阱?
非常感谢,
马诺
我已经看过params参数的次数比我说的多,并且在不考虑它的意义的情况下总是将其删除.现在我已经了解了它的目的.我刚学到的是params参数必须是参数列表中的最后一个.但这是我了解指定默认值的参数.例:
MyMethod(string Name, int blah=0).
Run Code Online (Sandbox Code Playgroud)
所以问题是如果我需要在需要使用时指定上面的默认值params,可以这样做吗?如果是这样,必须在最后宣布?例:
MyMethod(int blah=0, params string[] variableData).
Run Code Online (Sandbox Code Playgroud)
再次感谢您的帮助.詹姆士
我有以下方法:
void MyMethod(params object[] args)
{
}
Run Code Online (Sandbox Code Playgroud)
我试图用类型的参数调用object[]:
object[] myArgs = GetArgs();
MyMethod(myArgs);
Run Code Online (Sandbox Code Playgroud)
它编译很好,但在MyMethod我内部args == { myArgs},即一个数组,其中一个元素是我的原始参数.显然我想拥有args = myArgs,我做错了什么?
编辑:
Jon Skeet实际上是对的,GetArgs()确实将事物包装在一个元素数组中,对不起愚蠢的问题.
我已经使用Sinatra创建了一个简单的API,它根据提交的JSON数据发送电子邮件.我可以创建一个表单,通过表单提交JSON数据,并访问params以获取电子邮件的主题,主题和正文.但是,我正在尝试使用cURL来测试API,似乎无法让事情发挥作用.我假设我在cURL请求中的格式被破坏了.下面是我尝试过的cURL请求以及params的输出以及尝试使用JSON gem解析params.
我倾向于使用一个巨大的密钥获取params,这是一个我的JSON数据字符串,其值为nil.我已经尝试添加Content-Type:application/json,当我这样做时,params是空的.
curl -X POST -H "Accept: application/json" -d '{ "to": "Brantley <test@gmail.com>", "subject": "hello world", "body": "Hi Jennifer! Sending you an email via this API I just made." }' http://localhost:9393/send-email
Run Code Online (Sandbox Code Playgroud)
这是返回的params哈希...
{"{ \"to\": \"Brantley <test@gmail.com>\", \"subject\": \"hello world\", \"body\": \"Hi Jennifer! Sending you an email via this API I just made.\" }"=>nil}
Run Code Online (Sandbox Code Playgroud)
我尝试使用JSON参数转换为更有用的东西,然后我得到以下内容......
{\"{ \\\"to\\\": \\\"Brantley <test@gmail.com>\\\", \\\"subject\\\": \\\"hello world\\\", \\\"body\\\": \\\"Hi Jennifer! Sending you an email via this API I just made.\\\" }\":null}"
Run Code Online (Sandbox Code Playgroud)
我已经花了很多时间在这上面,已经阅读了20个关于类似问题的stackoverflow帖子,并且仍然难倒,所以任何建议都会有所帮助.干杯!
考虑这种方法
public static void NumberList(params int[] numbers)
{
foreach (int list in numbers)
{
Console.WriteLine(list);
}
}
Run Code Online (Sandbox Code Playgroud)
我可以调用这个方法并提供单独的integers或单个数组integers.在方法范围内,它们将被放入一个名为numbers (对吗?)的数组中,我可以继续操作它们.
// Works fine
var arr = new int[] { 1, 2, 3};
NumberList(arr);
Run Code Online (Sandbox Code Playgroud)
但是,如果我想调用该方法并提供数组,我会收到错误.你如何为数组启用params?
// Results in error
var arr = new int[] { 1, 2, 3};
var arr2 = new int[] { 4, 5, 6 };
NumberList(arr, arr2);
Run Code Online (Sandbox Code Playgroud) 我想在我的params地图中添加一个参数,并将其余参数绑定到链接中.目前,我只按params经典方式绑定如下:
<g:link class="email" controller="administrator" action="test" params="${params}">Link text</g:link>
Run Code Online (Sandbox Code Playgroud)
我怎样才能在params地图中添加参数?
提前感谢您的帮助.问候,
编辑:
好的,我找到了办法.
params="${params + ['forwardURI': request.forwardURI]}"
Run Code Online (Sandbox Code Playgroud)
我不知道是否有更多类似Grails的方法.如果有的话,我将不得不学习它;)
意识到这个问题与此类似.
但是,我想知道在一开始就通过参数启动应用程序.也许root:在routes.rb文件中是不是完全正确的方法去?
基本上希望它会像这样开始.
HTTP://本地主机:3000 /控制器hello_id = 1&finder_id = 1&laser_id = 1&sharks_id = 4
任何想法都会非常感激!
我在排球上使用以下代码进行字符串请求
pDialog = new ProgressDialog(context);
pDialog.setMessage("Loading...");
pDialog.setCancelable(false);
pDialog.show();
StringRequest strReq = new StringRequest(Method.POST,
url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
pDialog.dismiss();
Log.e(tag, response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
pDialog.dismiss();
}
}) {
protected Map<String, String> getParams(){
Map<String, String> params = new HashMap<String, String>();
params.put("tag", "SHOW_FILE");
params.put("filename",filename);
return params;
};
};
// Adding request to request queue
Application.getInstance().addToRequestQueue(strReq, "get_file");
Run Code Online (Sandbox Code Playgroud)
如果变量filename = null,我收到以下错误:
08-02 10:28:06.192: E/Volley(2935): [2128] NetworkDispatcher.run: Unhandled exception java.lang.NullPointerException
08-02 10:28:06.192: …Run Code Online (Sandbox Code Playgroud) 正如我正在试验的那样params,我注意到MS文档说如果你传递一个int具有签名的方法参数数组params object[] myParam,它将成为一个多维数组.但我注意到,如果你通过数组objects[]或者strings[]没有.这似乎很难处理,因为你必须检查多暗阵列.
例:
public static void UsingParams(params object[] myParam)
{
//Code to return myParam
}
//myParam[0][0] = {1, 2}, multi-dimensional
int[] myIntArray = {1, 2};
UsingParams(myIntArray);
//myParam[0] = {"1", "2"}, single-dimensional
string[] myStrArray = {"1", "2"};
UsingParams(myStrArray);
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
我希望能够传递这样的参数:
fn(a>=b) or fn(a!=b)
Run Code Online (Sandbox Code Playgroud)
我在DjangoORM和SQLAlchemy中看到了这种行为,但我不知道如何实现它.