2013-05-29 97 views
0

我在想我是否在这里做了一些根本性错误,但我试图让模型在视图中定义样式属性。因此,例如,该烬视图使用该卡片模板,并从<div style="color: green">...</div>开始,该模板由模型属性颜色支持。当我通过App.Card.find(2).set("color", "color: red").save()在其他地方更改它时,我期望模板更新值,但它什么都不做。在模板中直接使用{{ bindAttr style model.color }}会保持同步的值,但是我有一个额外的ember-view div元素。属性视图中的绑定不会根据模型更改进行更新

http://jsfiddle.net/dbhWg/3/

的javascript:

App = Ember.Application.create(); 

App.Store = DS.Store.extend({ 
    adapter: 'DS.FixtureAdapter' 
}); 

App.Router.map(function() { 
    // put your routes here 
}); 

App.IndexRoute = Ember.Route.extend({ 
    model: function() { 
     return App.Card.find() 
    } 
}); 

App.Card = DS.Model.extend({ 
    color: DS.attr('string'), 
}); 

App.Card.FIXTURES = [{ 
    id: 1, 
    color: "color: green" 
}, { 
    id: 2, 
    color: "color: blue" 
}]; 

App.CardView = Ember.View.extend({ 
    templateName: "card", 
    attributeBindings: ['style'], 
    style: function() { 
     return this.get('controller.model.color') 
    }.property('controller.model'), 
    didInsertElement: function() { 
     App.Card.find(2).set('color', "color: red").save() 
     console.log(App.Card.find(2).get('color')) 
    } 
}); 

模板:

<script type="text/x-handlebars" data-template-name="card"> 
    <h1> HELLO THERE </h1> 
</script> 

<script type="text/x-handlebars"> 
    <h2> Welcome to Ember.js </h2> 
    {{outlet}} 
</script> 

<script type="text/x-handlebars" data-template-name="index"> 
    {{#each item in model}} 
     {{render "card" item}} 
    {{/each}} 
</script> 
+0

jsfiddle似乎与您的示例不匹配 – ianpetzer

+0

哎呀抱歉,把它从别人的小提琴中分出来,纠正了链接。 – weehuy

回答

1

你忘了加上dependecency的颜色在计算财产

style: function() { 
    return this.get('controller.model.color') 
}.property('controller.model.color'), 

Working Fiddle

据我所知,你不能使用 bindAttr更新CSS什么 我建议你使用类代替,类定义为如下:

.red{ 
    color: red; 
} 

.green{ 
    color: green; 
} 

.blue: { 
    color: blue; 
} 

更新灯具为:

App.Card.FIXTURES = [{ 
    id: 1, 
    color: "green" 
}, { 
    id: 2, 
    color: "blue" 
}]; 

绑定的颜色class如下

App.CardView = Ember.View.extend({ 
    templateName: "card", 
    classNameBindings: ['color'], 
    color: function() { 
     return this.get('controller.model.color'); 
    }.property('controller.model.color'), 
    didInsertElement: function() { 
     App.Card.find(2).set('color', "red").save(); 
     console.log(App.Card.find(2).get('color')); 
    } 
}); 
+0

我简化了颜色,以便更容易。在我试图设定位置的真实情况中。所以实际属性是一个像“left:100px; top:100px;”的字符串。所以CSS类的变化并没有真正的工作。 正如我注意到

虽然工程。当视图版本没有时,猜测它是令人惊讶的,特别是当你注意到类的变化起作用时。如果有足够多的人同意这个问题有点不一致,我会调查一下拉请求。 – weehuy

+0

你想添加或减去当前位置的像素? –

+0

是或在其他情况下任意设置移动元素的位置,将其视为可拖动或其他内容。 – weehuy

相关问题