有没有办法为组件的@绑定指定默认值.
我已经看到了如何使用指令执行此操作的说明:如何在Angular Directive Scope中设置默认值?
但组件不支持编译功能.
所以,我有这样的组件:
{
name: 'myPad',
bindings : {layout: '@'}
}
Run Code Online (Sandbox Code Playgroud)
我希望释放组件的用户必须指定'layout'属性的值.所以这:
<my-pad>...</my-pad>
Run Code Online (Sandbox Code Playgroud)
而不是这个:
<my-pad layout="column">...</my-pad>
Run Code Online (Sandbox Code Playgroud)
而且......这个'layout'属性应该被使用的角度材质JS所消耗,所以它需要在渲染DOM之前被绑定(所以材质JS可以拾取它并添加相应的类到元素).
更新,一些截图来澄清情况:
组件定义:
{
name : 'workspacePad',
config : {
templateUrl: 'src/workspace/components/pad/template.html',
controller : controller,
bindings : {
actions: '<', actionTriggered: '&', workspaces: '<', title: '@',
flex: '@', layout: '@'
},
transclude: {
'workspaceContent': '?workspaceContent'
}
}
}
Run Code Online (Sandbox Code Playgroud)
组件用法:
<workspace-pad flex layout="column" title="Survey List" actions="$ctrl.actions"
action-triggered="$ctrl.performAction(action)">
<workspace-content>
<div flex style="padding-left: 20px; padding-right: 20px; ">
<p>test test</p>
</div>
</workspace-content>
</workspace-pad>
Run Code Online (Sandbox Code Playgroud)
我想在第二个屏幕截图(用法)选项中制作"flex"和"layout". …
有没有人有一个使用Ember-CLI使用LoDash构建的(简单)ember-app项目的工作示例?(例如:我想在我的路由和控制器中使用lodash,_.someLodashFunc).
我没有在网上看到任何关于如何做到这一点的明确,逐步解释的线索/文章.
如果可能的话,使用lodash v3.0.0(我使用的是最新的ember-cli,v0.1.9).
谢谢,拉卡
我发现了如何,你需要生成一个自定义的lodash("lodash modern").使用lodash-cli:https://lodash.com/custom-builds
在命令控制台上输入:lodash modern ...,然后你会得到一个生成的javascript文件:lodash.custom.js
将该文件放在ember-cli项目的"vendor"目录下.
修改Brocfile,添加:
app.import('vendor/lodash.custom.js', {
'lodash': [
'default'
]
});
Run Code Online (Sandbox Code Playgroud)
就是这样......你不必在你的任何js文件中执行"import _ from'loodash'".事实上,不要这样做(你会得到一个错误)._ var很容易获得.
例如,我有一个这样的Route对象:
import Ember from 'ember';
export default Ember.Route.extend({
model: function() {
console.log('hohoho: ' + _.chunk(['a', 'b', 'c', 'd'], 2));
return Ember.Object.create({name: 'Raka'});
}
});
Run Code Online (Sandbox Code Playgroud)
我可以看到hohoho:,b,c,当我访问那条路线时,我在javascript控制台中打印出来.
你真的不需要那个lodash-cli.
我试过这种方式(我想更合适):
而已._在路由器/控制器中自动可用.
我对d3做了同样的事情:
名为'd3'的变量可自动使用.
新增相关链接:
一旦控制器模型的属性更新,我想让页面自动刷新.
我正在关注这个提示:如何在Ember.js中重新加载当前路线?
所以,我的控制器中有一个动作方法"runSimulation",最后我有这一行:
this.send("sessionChanged");
Run Code Online (Sandbox Code Playgroud)
在相关的路线中,我有:
actions: {
sessionChanged: function() {
console.log('YEAH');
var transition = this.refresh();
console.log(transition);
}
},
renderTemplate: function(controller, model) {
console.log('DINGDONG');
var model = this.currentModel;
if (model.simulation.params == undefined) {
this.render('gobernador/crear-simulacion');
} else {
this.render('gobernador/show-simulacion');
}
}
Run Code Online (Sandbox Code Playgroud)
我可以看到YEAH被打印出来(意思是:控制器发送的"sessionChanged"事件被路由对象中的处理程序成功捕获了...),但我没有看到DINGDONG被打印出来.
我正在使用ember-cli,我启用了日志转换.我可以在我的javascript控制台中看到这个:
Transitioned into 'gobernadores.gobernador.simulacion'
Run Code Online (Sandbox Code Playgroud)
(预计).我想转换到"gobernadores.gobernador.simulacion"将导致调用renderTemplate(由于某种原因,这里没有发生).
什么可能给我们一个线索可能是"执行"刷新返回的"过渡"对象的值.在我的情况下,它给出:
{state: TransitionState, intent: C, **isActive: false,** router: Router, data: Object, resolvedModels: Object…} _visibleQueryParams: Objectdata: Object, handlerInfos: Array[4], intent: C, params: Object, pivotHandler: Class, promise: PromisequeryParams: Object, resolveIndex: 4,resolvedModels: Objectrouter: Routersequence: 4, state: TransitionStatetar, …Run Code Online (Sandbox Code Playgroud) 我使用Ember CLI 0.1.15和emberjs开发了我的webapp.1.8.1
我用这个命令构建了应用程序:ember build --environment production,然后我从我项目的dist文件夹下生成的文件中生成了一个WAR,然后我将WAR放在tomcat的webapps文件夹中.
所以,当我打开应用程序时:http:// mytomcat/myapp / ...它很好,我看到了我的登录屏幕,我登录了,并在我的应用程序中导航,一切都很好.我也可以做后退/前进按钮,并且ember可以很好地处理过渡.
但是当我点击浏览器上的刷新按钮时 - 浏览器的地址栏显示了http:// mytomcat/myapp/inventory /那一刻 - 我从tomcat得到了404回复.
然后我弄清楚它为什么会发生:刷新按钮向tomcat发送一个请求路径/ myapp/myinventory/...当然,服务器上不存在路径/ myinventory.我们在浏览器上看到的所有路由 - 除了基本URL,http:// mytomcat/myapp / - 都是在客户端生成的.
所以,我的问题是:处理这种情况的正确方法(在余烬中)是什么?我需要刷新按钮才能正常工作.任何方式让ember拦截刷新按钮点击事件?
我想这个问题与此有关:https://github.com/stefanpenner/ember-app-kit/issues/486,但它没有我需要的答案.
提前谢谢,拉卡
---更新---
我一直在寻找更新Route模型的机制,并让Component(在与该路由关联的模板内调用)对该事件作出反应,并重新渲染自身.
所以我有这样的索引模板(我传入了IndexController的模型,据我所知,它只是IndexRoute的代理 - 顺便说一句,我没有定义IndexController):
<script type="text/x-handlebars" id="index">
Below is the bar-chart component
<br/>
{{bar-chart model=model}}
</script>
Run Code Online (Sandbox Code Playgroud)
我有我的组件模板:
<script type="text/x-handlebars" data-template-name="components/bar-chart">
</script>
Run Code Online (Sandbox Code Playgroud)
我的组件是在一个单独的JS文件中实现的,如下所示:
App.BarChartComponent = Ember.Component.extend({
classNames: ['chart'],
model: null,
chart: BarChart(),
didInsertElement: function() {
Ember.run.once(this, 'update');
},
update: function() {
var data = this.get('model').map(function(sales) {
return sales.get('amount');
});
d3.select(this.$()[0]).selectAll('div.h-bar')
.data(data)
.call(this.get('chart'));
}
});
Run Code Online (Sandbox Code Playgroud)
BarChart()函数只返回一个函数对象,该对象执行DOM操作以使用D3生成图形.
我的IndexRoute定义如下:
App.IndexRoute = Ember.Route.extend({
model: function() {
return this.store.find('sales');
}
});
Run Code Online (Sandbox Code Playgroud)
在这个实验中,我使用夹具:
App.Sales = DS.Model.extend({
amount: DS.attr('number')
});
idx = 1;
App.Sales.FIXTURES = [
{id: idx++, …Run Code Online (Sandbox Code Playgroud) 我正在尝试从列表选项中创建一个地图.所以,我有一个像这样声明的列表选项:
val authHeaders: Option[Set[String]] = Some(Set("a", "b", "c"))
我想得到这样的地图:(a - > a,b - > b,c - > c).
所以我尝试了这种方式:
for {
headers <- authHeaders
header <- headers
} yield (header -> header)
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
<console>:11: error: type mismatch;
found : scala.collection.immutable.Set[(String, String)]
required: Option[?]
header <- headers
^
Run Code Online (Sandbox Code Playgroud)
我哪里做错了?
补充说明:这个选项让我非常头疼,但我需要了解如何在任何情况下处理它.无论如何,仅仅为了比较,我尝试通过删除选项来消除头痛因素.
scala> val bah = Set("a", "b", "c")
bah: scala.collection.immutable.Set[String] = Set(a, b, c)
scala> (
| for {
| x <- bah
| } yield (x -> x)).toMap
res36: scala.collection.immutable.Map[String,String] = …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种在Play框架中打印响应体的方法,我有这样的代码:
object AccessLoggingAction extends ActionBuilder[Request] {
def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) = {
Logger.info(s"""Request:
id=${request.id}
method=${request.method}
uri=${request.uri}
remote-address=${request.remoteAddress}
body=${request.body}
""")
val ret = block(request)
/*
ret.map {result =>
Logger.info(s"""Response:
id=${request.id}
body=${result.body}
""")
}
*/ //TODO: find out how to print result.body (be careful not to consume the enumerator)
ret
}
}
Run Code Online (Sandbox Code Playgroud)
目前,已注释掉的代码无法正常工作,我的意思是,它会打印出来:
Response:
id=1
body=play.api.libs.iteratee.Enumerator$$anon$18@39e6c1a2
Run Code Online (Sandbox Code Playgroud)
所以,我需要找到一种从Enumerator [Array [Byte]]中获取String的方法.我试着通过阅读这篇文章来了解Enumerator的概念:http://mandubian.com/2012/08/27/understanding-play2-iteratees-for-normal-humans/
所以...,如果我理解正确的话:
我不应该在将它转换为String的过程中干掉枚举器.否则,客户端将不会收到任何信息.
让我们假设我弄清楚如何实现T /过滤器机制.但那么......它不会打败Play框架作为非阻塞流式传输框架的目的(因为我会在内存中构建完整的字节数组,然后在其上调用toString,最后记录它)?
那么,记录响应的正确方法是什么?
提前谢谢,拉卡
难以让属于"用户"组的用户有权访问(至少读取)项目.我已经阅读并尝试了我在互联网上找到的几个例子,似乎都没有用.
我现在需要的是:允许属于"user"组的任何用户阅读名为MYPROJECT的项目.我有这个,保存在/ etc/rundeck下名为user.aclpolicy的文件中.我等了60多秒.我也试过重启RunDeck.没运气.
我一直在:
您没有授权访问项目.联系您的管理员.(用户角色:raka,用户)
description: application access to a project
application: 'rundeck'
for:
resource:
- equals:
kind: project
deny: [create] # deny create of projects
- equals:
kind: system
allow: [read] # allow read of system info
- equals:
kind: user
deny: [admin] # allow modify user profiles
project:
- equals:
name: 'MYPROJECT'
allow: [read] # allow access
deny: [import,export,configure,delete] # deny admin actions
storage:
- deny: [read,create,update,delete] # allow access for /keys/* storage content
by:
group: user
Run Code Online (Sandbox Code Playgroud)
YAML上面有什么问题?我还检查了/ …
由于强调Scala等编程语言的不变性(避免使用"var"),我的对象中的"状态修改方法"是否必须返回实例的副本(具有新状态)?
我们来考虑龟.我想像这样移动我的乌龟:
val turtle = new Turtle(0, 0, "north")
val turtle2 = turtle.turnLeft().forward(5).turnRight().backward(2)
Run Code Online (Sandbox Code Playgroud)
这里turtle2不会指向同一个Turtle实例(它们是两个独立的实例).事实上,在这一系列运动中,创造了4个临时物体.这就是我实现方法turnLeft的方法,例如:
def turnLeft {
self.copy(orientation = self.orientation match {
case "north" => "west"
case "east" => "north"
case "south" => "east"
case "west" => "south"
})
}
Run Code Online (Sandbox Code Playgroud)
这是一种正确的设计方法吗?
如果是,那么(在每个方法调用上创建新对象)效率/效率如何?如果不是,那么什么是正确的?我对不变性方面(或者一般的函数式编程)的理解有什么不对/缺失?
提前谢谢,拉卡