我需要实现以下WebAPI方法:
/api/books?author=XXX&title=XXX&isbn=XXX&somethingelse=XXX&date=XXX
Run Code Online (Sandbox Code Playgroud)
所有查询字符串参数都可以为null.也就是说,调用者可以指定从0到所有5个参数.
在MVC4 beta中我曾经做过以下事情:
public class BooksController : ApiController
{
// GET /api/books?author=tolk&title=lord&isbn=91&somethingelse=ABC&date=1970-01-01
public string GetFindBooks(string author, string title, string isbn, string somethingelse, DateTime? date)
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
MVC4 RC不再像这样了.如果我指定少于5个参数,它会回复404一句话:
未在与请求匹配的控制器"Books"上找到任何操作.
什么是正确的方法签名,使其行为像以前一样,而不必在URL路由中指定可选参数?
我正在尝试构建一个指令,负责向声明它的元素添加更多指令.例如,我想构建一个负责添加的指令datepicker,datepicker-language和ng-required="true".
如果我尝试添加这些属性然后使用$compile我显然会生成一个无限循环,所以我正在检查我是否已经添加了所需的属性:
angular.module('app')
.directive('superDirective', function ($compile, $injector) {
return {
restrict: 'A',
replace: true,
link: function compile(scope, element, attrs) {
if (element.attr('datepicker')) { // check
return;
}
element.attr('datepicker', 'someValue');
element.attr('datepicker-language', 'en');
// some more
$compile(element)(scope);
}
};
});
Run Code Online (Sandbox Code Playgroud)
当然,如果我没有$compile元素,那么将设置属性但是指令不会被引导.
这种方法是正确的还是我做错了?有没有更好的方法来实现相同的行为?
UDPATE:鉴于这$compile是实现这一目标的唯一方法,有没有办法跳过第一个编译传递(该元素可能包含几个子节点)?也许通过设置terminal:true?
更新2:我已经尝试将指令放入一个select元素中,正如预期的那样,编译运行两次,这意味着预期option的数量是预期的两倍.
javascript model-view-controller mvvm angularjs angularjs-directive
我必须使用Web服务取得的WebAPI由ASP .NET MVC提供4.我知道其中的WebAPI自动工作在顶部层处理的OData查询(例如$filter,$top,$skip),但如果我想自己处理过滤?
我不是简单地从我的数据库返回数据,但我有另一个层添加了一些属性,进行了一些转换等等.因此查询我的所有数据,转换它们并将它们返回到WebAPI类进行OData过滤不仅仅是好的足够.它当然非常慢,通常是一个糟糕的想法.
那么有没有办法将OData查询参数从我的WebAPI入口点传播到我调用的函数来获取和转换数据?
例如,/api/people?$skip=10&$top=10要调用服务器的GET :
public IQueryable<Person> get() {
return PersonService.get(SomethingAboutCurrentRequest.CurrentOData);
}
Run Code Online (Sandbox Code Playgroud)
并在PersonService:
public IQueryable<Person> getPeople(var ODataQueries) {
IQueryable<ServerSidePerson> serverPeople = from p in dbContext.ServerSidePerson select p;
// Make the OData queries
// Skip
serverPeople = serverPeople.Skip(ODataQueries.Skip);
// Take
serverPeople = serverPeople.Take(ODataQueries.Take);
// And so on
// ...
// Then, convert them
IQueryable<Person> people = Converter.convertPersonList(serverPeople);
return people;
}
Run Code Online (Sandbox Code Playgroud) 我使用Knockout.js作为MVVM库将我的数据绑定到某些页面.我目前正在构建一个库来对Web服务进行REST调用.我的RESTful Web服务返回一个简单的结构:
{
id : 1,
details: {
name: "Johnny",
surname: "Boy"
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个可观察的主要父母,myObject.当我做
myObject(ko.mapping.fromJS(data))
Run Code Online (Sandbox Code Playgroud)
可观测量myObject是:
idnamesurname我怎样才能details(理论上结构中的任何对象都是可观察的)?我需要这种行为,这样我就可以在细节上设置一个计算的observable,并在任何内部数据发生变化时立即注意到.
我已经设置了一个基本的递归函数,应该可以解决这个问题.当然,myObject.details它不会成为可观察的.
// Makes every object in the tree an observable.
var makeAllObservables = function () {
makeChildrenObservables(myObject);
};
var makeChildrenObservables = function (object) {
// Make the parent an observable if it's not already
if (!ko.isObservable(object)) {
if ($.isArray(object))
object = ko.observableArray(object);
else
object = ko.observable(object);
}
// Loop through its …Run Code Online (Sandbox Code Playgroud) javascript mvvm knockout-mapping-plugin knockout-2.0 knockout.js
我已经设置了一个顶级控制器,只有在Config成功解析了promise(由工厂返回)时才会实例化.该承诺基本上下载了Web应用程序配置,使用RESTful端点等.
$stateProvider
.state('app', {
url: '/',
templateUrl: 'views/_index.html',
controller: 'MainCtrl',
resolve: {
config: 'Config'
}
});
Run Code Online (Sandbox Code Playgroud)
此设置允许我在任何较低控制器有机会使用之前断言配置已正确加载.
现在我需要在更深层次的嵌套控制器中注入另一个factory使用它Config并且仅在解析时才能工作(看起来就像$resource需要一些Web服务URL 的包装器).如果我做:
$stateProvider
.state('app.bottom.page', {
url: '/bottom/page',
templateUrl: 'views/_a_view.html',
controller: 'BottomLevelCtrl',
resolve: {
TheResource: 'MyConfigDependingResource'
}
});
Run Code Online (Sandbox Code Playgroud)
看起来resolve评估顺序不是从上到下跟随控制器层次结构,而是从下到上,因此:
app.bottom.page 进入ui-router尝试解决MyConfigDependingResource,但注入失败,因为Config从未初始化ui-router决议停止,因为一个错误的(甚至没有扔ErrorS,但这是另一个问题),并且Config永远不会被顶层控制器初始化为什么ui-router以相反的顺序解析依赖关系?我怎么能轻易解决我的TheResource对象后的顶层MainCtrl已经解决了Config(不依靠$inject,当然)?
更新:从这个plnkr的日志中,您可以看到resolve只有在嵌套控制器启动了自己的解析过程后才尝试顶层.
javascript dependency-injection promise angularjs angular-ui-router
这是我的场景:我有一个登录屏幕,可以打开另一个活动.在活动中,我只需:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details);
}
Run Code Online (Sandbox Code Playgroud)
布局有点沉重,因为它是由一些碎片组成的,并且需要大约1.5秒才能加载.现在,我如何显示一段ProgressDialog时间setContentView完成布局?我已经尝试AsyncTask过将其setContentView放入doInBackground,但当然无法完成,因为UI只能从UI线程更新.所以我需要setContentView在UI线程中调用,但是我必须在哪里显示/关闭ProgressDialog?
我感谢您的帮助.
弗拉.
编辑:我跟着@ JohnBoker先前的建议,这是我现在的代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_empty_layout);
new ContentSetterTask().execute("");
}
private class ContentSetterTask extends AsyncTask<String, Void, Void> {
public ProgressDialog prgDlg;
@Override
protected void onPreExecute() {
android.os.Debug.waitForDebugger();
prgDlg = ProgressDialog.show(MultiPaneActivity.this, "", "Loading...", true);
}
@Override
protected Void doInBackground(String... args) {
android.os.Debug.waitForDebugger();
ViewGroup rootView = (ViewGroup)findViewById(R.id.emptyLayout);
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View inflated …Run Code Online (Sandbox Code Playgroud) multithreading android progressdialog android-asynctask android-activity
我在使用Maven这个即用型项目时遇到了一些问题:http://wiki.javaforum.hu/display/ANDROIDSOAP/Home 基本上,我只需要更改几行,我应该准备好使用生成的文件.问题是当我做mvn:idea(或mvn:eclipse)清理时,我得到这些警告:
Z:\Workspace\AndroidSOAP>mvn idea:clean
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for hu.javaforum.android:AndroidSOAP:pom:0.0.4-SNAPSHOT
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-pmd-plugin is missing. @ line 117, column 15
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 95, column 15
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-surefire-report-plugin is missing. @ line 167, column 15
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-source-plugin is missing. @ line 156, column 15
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-jar-plugin is missing. @ line 106, column 15
Run Code Online (Sandbox Code Playgroud)
如何安装缺少的插件?我一直在寻找并空手而归.
我正在寻找一种方法来暂停给定ContentProvider的通知Uri.用例是:
Activity被绑定到一个CursorAdapter通过CursorLoader.Service可以在a上进行大量批量,单行更新ContentProvider.CursorLoader将加载其上的每一行更新内容,作为ContentProvider被通知侦听ContentResolver#notifyChange.由于我无法编辑ContentProvider,并且我无法控制批处理查询执行,是否有办法暂停Uri(在执行中Service)通知,直到所有ContentProvider管理的查询都已执行?我需要这个,以避免连续重新获得的闪烁CursorLoader.
我知道这个问题被问了太多次,但我认为我试图针对的问题有点不同,可能更复杂.
我将开发一个使用RESTful Web服务的应用程序,并且需要满足以下要求:
应用程序应该在列表和详细信息中显示一些书籍,作者和编辑
该应用程序还应该允许搜索一本书
书籍,作者和编辑器是从RESTful Web服务中获取的
每个实体都必须被缓存,这样当我打开一个Activity时,我首先看到旧数据(如果有的话),而新的数据从网络更新.
每次实体更新时,都应通知相关方(ContentObserver?定期Listener实施?)
如果一个呼叫已经在执行(说到api/books/1337或来api/editors),应该通知呼叫者它正在加载数据,并且应该给它一个旧的(如果它存在),就像它是原始呼叫者一样.
一些数据(只有书籍和作者)应每N分钟更新一次(由用户决定),并应通知观察员(SyncAdapter?)
问题:
在观看和研究Virgil Dobjanschi在Google I/O 2010上提出的所有组件之后,我对此表示怀疑:
如何透明地为任何呼叫者处理" 实体更新 "概念?我应该使用ContentObserver在ContentProvider我将要实施?
如果我使用a,ContentObserver我可以轻松地为单个实体设置状态标志(如Dobjanschi所建议的),例如UPDATING,INSERTING依此类推.但是我该如何处理清单呢?说我想要一本书清单,我应该把状态标志放在哪里?我应该将它放在状态表中仅列表吗?如果是这样,我应该观察两个Cursors,一个用于状态,一个用于实际列表(即表/内容URI).如果我要求的实体(尚未存在)或REST调用返回一个404怎么办?我该如何处理回调?
如果我将所有REST方法都放在一个中**SyncAdapter**,我可以"强制" SyncAdapter从网络更新实体/实体列表(并因此将其放入正确的表中)吗?这样,状态标志将是有用的.
可以SyncAdapter在多个实体上工作(实际上,实体列表,因为我想偶尔更新书籍和编辑器),因为它只有一个performSync方法?
如果SyncAdapter用户在设备设置中禁用了我的实现,它将不会更新任何内容(这没关系).但是,如果用户单击"活动"中的"更新书籍"按钮,我仍然可以调用该performSync方法,还是也会被禁用?
rest android android-contentprovider android-syncadapter contentobserver
是否可以在编译时比较两个对象而不知道它们的盒装类型?例如,如果我有一个object{long}和object{int},有没有办法知道盒装值是否相等?
我的方法检索两个泛型object,并且在编译时无法知道它们的内部类型是什么.现在,通过以下代码进行比较:
_keyProperties[x].GetValue(entity, null).Equals(keyValues[x])
Run Code Online (Sandbox Code Playgroud)
其中,比方说_keyProperties[x].GetValue(entity, null)是a object{long}和keyValues[x]a object{int}(但也可以倒置).
我需要这个,因为我正在为我的单元测试构建一个模拟存储库,我已经开始通过包含这里描述的通用存储库实现.此实现在其Find方法中比较两个通用伪数据库键.
android ×4
javascript ×3
angularjs ×2
c# ×2
mvvm ×2
rest ×2
casting ×1
comparison ×1
knockout-2.0 ×1
knockout.js ×1
maven ×1
maven-3 ×1
maven-plugin ×1
odata ×1
promise ×1
query-string ×1
soap ×1
types ×1
url ×1