首先,我理解text/babel不是用于生产,但我发现它对于开发非常有用,因为当我对我的.jsx文件进行更改时,django的dev webserver将重新加载而不需要做任何事情(即在每次更改后将JSX编译为JS) .
我不能控制构建环境(例如django),因为这是一个我不开发的大型系统的小插件.
问题是这样的:
<script type="text/babel" src="{% static "myapp/js/main.jsx" %}"></script>
<script>
$(function() {
console.log(mything);
}
</script>
Run Code Online (Sandbox Code Playgroud)
哪里mything是main.jsx作为简单的东西:
var mything = "hello";
Run Code Online (Sandbox Code Playgroud)
如果main.jsx是javascript(并且相应地更改了脚本标签的类型)那么这将正常工作.由于text/babel虽然,它不会工作,因为mything不在范围内.
Uncaught ReferenceError: mything is not defined
Run Code Online (Sandbox Code Playgroud)
这对我来说很有意义,因为我不希望不同类型的脚本标签共享范围,但我想知道是否有一些聪明的方法可以帮助开发?
我以前将所有代码都放在一个text/babel块中,但随着它的增长,将它分成几个JSX文件会很不错.
有时在django模板中使用select_related是有意义的.例如,假设我有一个扩展DetailView的类
class DemoCarView(DetailView):
model = Car
Run Code Online (Sandbox Code Playgroud)
基于以下设计模型
# Cars
class Car(models.Model):
name = models.CharField(max_length=32)
# Manufacturers
class Manufacturer(models.Model):
name = models.CharField(max_length=32)
# Parts
class Part(models.Model):
name = models.CharField(max_length=32)
car = models.ForeignKey(Car)
manufacturer = models.ForeignKey(Manufacturer)
Run Code Online (Sandbox Code Playgroud)
然后是html模板
{{ car.name }}
<ul>
{% for part in car.part_set.all %}
<li>{{ part.name }} - {{ part.manufacturer.name }} </li>
{% endfor %}
</ul>
Run Code Online (Sandbox Code Playgroud)
这非常适用于汽车,构成汽车的零件以及这些零件的制造商.但是,这将使用2 + number_of_parts SQL查询来执行此操作.像这样容易修复:
{{ car.name }}
<ul>
{% for part in car.part_set.select_related.all %}
<li>{{ part.name }} - {{ part.manufacturer.name }} </li>
{% …Run Code Online (Sandbox Code Playgroud) 我已经看到很多关于如何在不使用基于类的视图时解决这个问题的答案.是否有一些非常明显的事情我错过了用CBV做的事情?
基本上我想在我的表单中有一个MultipleChoiceField,它的选择取决于视图中发生的事情.例如,我使用URL中的PK来执行一些后端请求,然后应该使用这些请求来填充选项.
# forms.py
from django.forms import Form, MultipleChoiceField, CharField
class EmailForm(Form):
users = MultipleChoiceField(required=False)
subject = CharField(max_length=100)
message = CharField()
def __init__(self, users=None, *args, **kwargs):
super(EmailForm, self).__init__(*args, **kwargs)
if users:
self.fields['users'].choices = users
#urls.py
from django.conf.urls import url, patterns
from .views import EmailView
# url patterns
urlpatterns = patterns('',
url( r'^(?P<pk>\d+)$', EmailView.as_view(), name="maindex" ),
)
#views.py
from django.views.generic import FormView, TemplateView
from .forms import EmailForm
class EmailView(FormView):
template_name = 'myapp/email.html'
form_class = EmailForm
success_ulr = '/thanks/'
def form_valid(self, form): …Run Code Online (Sandbox Code Playgroud) 我有一个问题,其中增强器(在这种情况下为redux-little-router)吞并了一个动作并调度了一个新动作。我也有中间件,该中间件需要侦听此新操作(以及其有效负载)并作为响应调度异步操作。
这是不可能的,因为增强器位于链中的applyMiddleware之后(应该如此),因此分派的新操作仅通过后续增强器的分派功能进行。
这是一个人为的示例:
export const testMiddleware = store => next => action => {
console.log('Middleware1', action.type);
if (action.type === 'SOME_OTHER_ACTION_TYPE') {
console.log('Hurray, responded to some other action here!');
}
return next(action);
};
function testEnhancer() {
return(createStore) => (reducer, preloadedState, enhancer) => {
const store = createStore(reducer, preloadedState, enhancer);
const dispatch = (action) => {
// Swallow this action, and dispatch the replacement
if (action.type === 'SOME_ACTION_TYPE') {
console.log('testEnhancer', action.type, 'swallowing');
store.dispatch({
type: 'SOME_OTHER_ACTION_TYPE',
payload: 'some other payload'
});
return null; …Run Code Online (Sandbox Code Playgroud)