小编Bee*_*nny的帖子

如何创建单独的AngularJS控制器文件?

我将所有AngularJS控制器都放在一个文件controllers.js中.该文件的结构如下:

angular.module('myApp.controllers', [])
  .controller('Ctrl1', ['$scope', '$http', function($scope, $http) {    
  }])
  .controller('Ctrl2', ['$scope', '$http', function($scope, $http) }
  }])
Run Code Online (Sandbox Code Playgroud)

我想做的是将Ctrl1和Ctrl2放入单独的文件中.然后我会在index.html中包含这两个文件,但是应该如何构建呢?我尝试做这样的事情,它在Web浏览器控制台中抛出一个错误,说它无法找到我的控制器.任何提示?

我搜索了StackOverflow并发现了类似的问题 - 但是,这种语法在Angular之上使用了不同的框架(CoffeeScript),因此我无法遵循.


AngularJS:如何在多个文件中创建控制器

javascript controller angularjs

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

AWS - 想要将多个文件上传到 S3,并且只有当所有文件都上传时才会触发 lambda 函数

我正在寻求有关设计此最佳方式的建议-

用例

我想将多个文件放入 S3。成功保存所有文件后,我想触发一个 lambda 函数来做一些其他工作。

天真的方法

我解决这个问题的方法是在 Dynamo 中保存一条记录,其中包含一个唯一标识符和我将上传的记录总数以及应该存在于 S3 中的密钥。

一个基本的实现是采用我现有的 lambda 函数,该函数在我的 S3 存储桶写入时调用,并让它手动检查是否所有其他文件都已保存。

Lambda 函数会知道(查看 Dynamo 以确定我们要查找的内容)并查询 S3 以查看其他文件是否在其中。如果是,请使用 SNS 触发我的另一个 lambda 来执行其他工作。

编辑:另一种方法是让我将文件放在 S3 中的客户端程序负责直接调用另一个 lambda 函数,因为从技术上讲,它知道所有文件何时上传。这种方法的问题是我不希望这是客户端程序的责任......我希望客户端程序不在乎。一旦它上传了文件,它应该能够退出。

想法

我不认为这是一个好主意。主要是因为 Lambda 函数应该是轻量级的,并且从 Lambda 函数内轮询数据库以获取所有上传文件的 S3 密钥,然后检查 S3 是否存在 - 每次都这样做似乎是贫民窟并且非常重复。

什么是更好的方法?我正在考虑使用 SWF 之类的东西,但不确定这对我的解决方案来说是否太过分了,或者它是否能让我做我想做的事。该文档也没有显示真正的“示例”。这只是一个讨论,没有太多的分步指南(也许我找错了地方)。

编辑回应以下 mbaird 的建议-

选项 1 (SNS)这就是我会去的。这很简单,并没有真正违反单一职责原则。也就是说,客户端上传文件并发送通知(通过 SNS)表明其工作已完成。

选项 2(Dynamo 流)因此,这本质上是选项 1 的另一个“实现”。客户端进行服务调用,在这种情况下,这会导致表更新与 SNS 通知(选项 1)。此更新将触发 Lambda 函数,而不是通知。不错的解决方案,但我更喜欢使用 SNS 进行通信,而不是依赖数据库的功能(在本例中为 Dynamo 流)来调用 Lambda 函数。

在任何情况下,我都在使用 AWS 技术并与他们的产品(Lambda 函数、SNS 等)耦合,但我觉得依赖于 Dynamo 流之类的东西使其耦合更加紧密。对我的用例来说并不是一个很大的问题,但仍然感觉很脏;D …

amazon-s3 amazon-web-services amazon-swf aws-lambda

10
推荐指数
1
解决办法
4148
查看次数

Android,AsyncTask中的实用程序类和松散耦合请指教

我试图搜索关于这个主题的任何讨论,但到目前为止我还没有找到任何有用的东西.因此,我决定继续发布这个.

所以我的查询是关于Android最佳做法.我正在创建一个调用RESTful端点的简单应用程序,解析下载的JSON,并在活动中包含的某些片段中显示结果.

我有一个自定义的"实用程序"类,它扩展了AsyncTask.在doInBackground方法中,我发出请求,将响应存储在String中等等(非常简单的东西).

现在,我了解AsyncTask还有另外两个方法 - onPreExecute和onPostExecute.如果我在网上研究的是正确的,这些方法是我应该能够与UI交互的地方,通过将我的上下文传递给这个实用程序类,通过id查找视图,设置字段文本,或者我想要的任何内容去做.

所以这是我的问题.围绕这个的最佳做法是什么?

目前,扩展AsyncTask并使Web服务调用的实用程序类具有私有成员变量:

    private FragmentActivity mActivityContext;
Run Code Online (Sandbox Code Playgroud)

然后,为了与UI进行交互,我做了类似这样的事情:

@Override
protected  void onPreExecute()
{
    super.onPreExecute();
    android.support.v4.app.FragmentManager fm = mActivityContext.getSupportFragmentManager();
    MainActivity.PlaceholderFragment fragment = (MainActivity.PlaceholderFragment)fm.findFragmentByTag("PlaceholderFragment");

    if (fragment != null)
    {
        TextView textView = (TextView)fragment.getView().findViewById(R.id.my_custom_field);
        textView.setText("This field was updated through onPreExecute!");
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然到目前为止这似乎工作正常,但我担心的是 - 如果实用程序类访问它引用的活动的片段管理器?它甚至应该参考活动吗?通过使用片段管理器,实用程序类必须知道片段标记.这不是一种非常模块化或松散耦合的方法.当我创建实用程序类的实例时,解决方案就像传递fragment标记一样简单而不是像我现在那样硬设置吗?还是有更好的替代路线?

android android-asynctask android-fragments

6
推荐指数
1
解决办法
1192
查看次数

按后退按钮调用onCreate(Android)

活动A启动活动B.在活动B中,我有这个方法:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == android.R.id.home) {
        // This ID represents the Home or Up button. In the case of this
        // activity, the Up button is shown. Use NavUtils to allow users
        // to navigate up one level in the application structure. For
        // more details, see the Navigation pattern on Android Design:
        //
        // http://developer.android.com/design/patterns/navigation.html#up-vs-back
        //
        NavUtils.navigateUpTo(this, new Intent(this,
                ArticleListActivity.class));
        return true;
    }
    return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)

当我按下那个主页按钮时,它会将我带到活动A.但是,onCreate再次被调用.我不想要这种行为.

我猜它是因为这个实现使用新的Intent到导航堆栈中的前一项.这只是我在创建双窗格项目时从Eclipse获得的代码.我查看了堆栈溢出,虽然似乎使用Intent返回导致此行为,但我不明白为什么Google会在默认模板中提供此功能.

我应该如何以不同的方式进行此调用,以便在返回活动A时不再调用onCreate?

android android-intent android-activity

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

Jersey 客户端的 URL 编码问题

我需要进行如下服务调用: http://myservice.com/path ?var1=value1&var2=value2

我遇到的问题是 value1 和 value2 最终被编码,这使得服务调用失败。例如,value1 类似于“a=b&b=c;2&&=”...它基本上包含特殊字符。

我猜测这是服务需要解决的问题 - 正确处理解码编码字符,我认为它目前没有这样做。

以下是我如何提出这些请求的示例:

WebTarget target = client.target("http://test.com")
    .path("path1")
    .queryParam("var1", var1);
Builder builder = target.request();
...
Run Code Online (Sandbox Code Playgroud)

让我困惑的是,如果我仅使用 Chrome 发出相同的请求,一切都会正常。所以这让我相信我应该通过 Jersey API 来“禁用”编码。

java jersey-client jersey-2.0

5
推荐指数
1
解决办法
4250
查看次数

如何自动调整mkmapview的大小以填充方向更改的整个屏幕?

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:YES];

    self.mapView.frame = self.view.bounds;
    self.mapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    CLLocationCoordinate2D startCoord = CLLocationCoordinate2DMake(36.7472, -95.9594);
    MKCoordinateRegion adjustedRegion = [self.mapView regionThatFits:MKCoordinateRegionMakeWithDistance(startCoord, 10000*1609.344, 10000*1609.344)];
    [self.mapView setRegion:adjustedRegion animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

这就是我现在的代码.当我将iPad的方向从横向更改为纵向时,地图视图的大小不会更改.我希望它能填满整个视图.我试过搜索谷歌和stackoverflow的解决方案,但我没有运气.

任何帮助都会非常感激.

resize orientation mapkit mkmapview ios

4
推荐指数
2
解决办法
6715
查看次数

如何使用Python打开Goog​​le Chrome并传入参数?

以下是我尝试这样做的方法:

# Start Google Chrome
subprocess.call(["C:\Program Files (x86)\Google\Chrome\Application\chrome.exe", "--kiosk"])
Run Code Online (Sandbox Code Playgroud)

如果我将--kiosk标记添加到桌面上的Google Chrome快捷方式,则Chrome会以自助服务终端模式启动.但是,当我通过Python尝试这个时,它似乎不起作用.我在Google和这里搜索过,但到目前为止还没有找到任何内容.请帮忙.

python subprocess google-chrome

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

Java Camel框架:丢失处理器中的消息体

所有,

这是一条简单的路线:

 <route>
    <from uri="jetty://http://0.0.0.0:9090/myproject" />
    <setExchangePattern pattern="InOnly" />
    <process ref="JsonValidator"/> 
    <unmarshal>
       <json library="Jackson" unmarshalTypeName="com.myproject.JsonPojo"/>
    </unmarshal>
    ...
 </route>
Run Code Online (Sandbox Code Playgroud)

JsonValidator是一个简单的Java bean,我扩展了处理器.在这里,我想确保在继续使用Jackson将JSON解组到我的POJO之前的unmarshal调用之前传递所有必需的字段.

我现在所做的只是一行:

  public void process(Exchange exchange) throws Exception {
      String input = exchange.getIn().getBody(String.class);
  }
Run Code Online (Sandbox Code Playgroud)

简单地调用exchange.getIn().getBody(String.class)导致我的路径中的下一个(解组)步骤抛出错误,说没有任何解组.事实上,我通过在JsonValidator之后添加另一个处理器来测试这个 - 在那里,交换体不是null但是它是空的.

这是错误:

com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
         at [Source: org.apache.camel.converter.stream.InputStreamCache@78f0a00a; line: 1, column: 1]
            at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164)
            at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:2931)
            at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2873)
            at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2080)
            at org.apache.camel.component.jackson.JacksonDataFormat.unmarshal(JacksonDataFormat.java:105)
            at org.apache.camel.processor.UnmarshalProcessor.process(UnmarshalProcessor.java:65)
            at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
            at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398)
            at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
            at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
            at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
            at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
            at org.apache.camel.component.jetty.CamelContinuationServlet.service(CamelContinuationServlet.java:151)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) …
Run Code Online (Sandbox Code Playgroud)

java json apache-camel jackson

2
推荐指数
1
解决办法
3225
查看次数

使用Java 8 lambda将列表映射转换为不同的Map

我有这样的数据:

List<Map<String, String>> = // psuedocode
[
 {
  "ID": "a",
  "Value": "val1"
 },
 {
  "ID": "b",
  "Value": "val2"
 },
]
Run Code Online (Sandbox Code Playgroud)

我想把它变成

Map<String, String> = // more pseudocode
{
 "a": "val1",
 "b": "val2"
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我有这样的事情:

    Map<String, String> output = myList.stream()
            .flatMap(m -> m.entrySet().stream())
            .collect(Collectors.toMap())
Run Code Online (Sandbox Code Playgroud)

有人可以指导我吗?另一种方法是使用常规for循环,但我正在尝试使用lambdas.

java lambda java-8

0
推荐指数
1
解决办法
246
查看次数