我经历了Laravel Blade tutorial。我在我的项目中使用它。但我想根据下拉列表中选择的项目添加不同的刀片模板视图。
示例: - 我有一个创建Question.blade.php页面。
Question.blade.php
<div class="question_type">
<?php $question_type= array('--' => '--- Select Question Type ---')
+QuestionType::lists('name', 'id') ?>
{{ Form::select('question_type', $question_type,'--' ,array('id'=>'question_type','class' => 'form-control')) }}
</div>
现在我想根据在Question_Type下拉列表中选择的选项添加不同类型的视图。我试图用Java Script做到这一点。
Java脚本代码: -
function addQuestion()
{
var question_type=$("#question_type").val();
switch (question_type)
{
case 1:
$("#Questions").load("questions/type1.blade.php");
case 2:
$("#Questions").load("questions/type2.blade.php");
default:
$("#Questions").load("questions/default_type.blade.php");
}
}
但我收到错误 localhost / mywebsite / question / questions / type1.blade.php 404(未找到)
是否有任何解决方案可以使用@if @else或@switch根据下拉列表选择项目的值来包含刀片视图?
我的伪代码: -
@if {{question_type.selected.val='1'}}
@include(question.type1);
@elseif {{question_type.selected.val='2'}}
@include(question.type2);
@else
@include(question.default_type);
@endif
答案 0 :(得分:1)
如果你要求laravel,你需要有一个与route相关联的方法(无论是在他们的hello world示例中的简单闭包还是在{{3}中的方法})。)。
在内部,方法是您可以在哪个视图上返回的逻辑:
if($someCondition) {
return View::make('template1');
} else {
return View::make('template2');
}
在您的javascript中,将您的question_type
作为参数发送到AJAX请求中。然后在您的控制器方法中,您可以做出决定:
$("#Questions").load("questions/type", "question_type="+question_type);
您的路线:
Route::get('questions/type', function() {
switch(Input::get('question_type')) {
case 1:
return View::make("questions/type1.blade.php");
case 2:
return View::make("questions/type2.blade.php");
default:
return View::make("questions/default_type.blade.php");
}
});
您对jQuery.load()
的调用将隐式设置DOM元素的内容,ID Questions等于请求的整个输出(返回视图中包含的内容)。来自controller:
此方法是从服务器获取数据的最简单方法。它大致相当于$ .get(url,data,success),除了它是一个方法而不是全局函数,它有一个隐式回调函数。当检测到成功的响应时(即当textStatus为“success”或“notmodified”时),。load()将匹配元素的HTML内容设置为返回的数据。