Spark 中的新视图,使用 Vue
New view in Spark, using Vue
我现在正在开发我的第一个基于 Spark 基础的应用程序,但遇到了瓶颈。我应该提一下,我已经两次浏览了整个 Vue Laracast——但是 Vue 在 Spark 中的使用方式不同,这让我感到困惑。希望有人能为我澄清一下。
所以,到目前为止我添加的第一个自定义 view 是:
@extends('spark::layouts.app')
@section('content')
<master-servers>
<div class="container">
<!-- Add Server -->
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">Add Server</div>
<div class="panel-body">
<form class="form-horizontal" role="form" method="POST" v-on:submit.prevent='methodAddServer'>
{{ csrf_field() }}
@if(count($errors) > 0)
<div class="alert alert-danger">
@foreach($errors->all() as $error)
<p>{{ $error }}</p>
@endforeach
</div>
@endif
@if(session('fail'))
<div class="alert alert-danger">
<p>{{ session('fail') }}</p>
</div>
@endif
@if(session('success'))
<div class="alert alert-success">
<p>{{ session('success') }}</p>
</div>
@endif
<!-- Server Label -->
<div class="form-group">
<label class="col-md-4 control-label">Server Label</label>
<div class="col-md-6">
<input type="text" class="form-control" name="name" v-model='addServer.name' value="{{ old('name') }}" autofocus>
</div>
</div>
<!-- IP -->
<div class="form-group">
<label class="col-md-4 control-label">IP Address</label>
<div class="col-md-6">
<input type="text" class="form-control" name="ip" v-model='addServer.ip' value="{{ old('ip') }}">
</div>
</div>
<!-- Add Button -->
<div class="form-group">
<div class="col-md-8 col-md-offset-4">
<button type="submit" class="btn btn-primary" :disabled="addServerFormBusy">
<i class="fa m-r-xs fa-sign-in"></i>Add server
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</master-servers>
@endsection
在 resources\assets\js\components 中,我有一个名为 servers.js 的文件,其中包含:
var base = require('../master/servers/servers');
Vue.component('master-servers', {
mixins: [base]
})
最后,resources\assets\js\master\servers\servers.js 包含:
module.exports = {
data: function() {
return {
addServer: [
{ name: '' },
{ ip: '' }
]
}
},
methods: {
methodAddServer: function(e) {
console.log(addServer);
this.addServerFormBusy = true;
this.$http.post('server', this.addServer);
}
}
};
手头的问题:浏览此页面并查看控制台时,我得到以下信息:
Error when evaluating expression "addServer.name": TypError: Cannot
read property "name" of undefined
You are setting a non-existant path "addServer.name" on a vm instance.
Consider pre-initializing the poprety with the "data" option for more
reliable reactivity and better performance.
v-on:submit="methodAddServer" expects a function value, got undefined
我试过的:
我也尝试过在不使用 mixin 的情况下将所有代码添加到组件中(作为测试)——但这导致了同样的问题。
我花了一些时间研究视图(如 Vue)现在是如何在 Spark 中构建的,但最终在结构中迷失了很多。
根据我在观看 Vue laracast 时所了解的一切,这应该可行 - 但由于 Spark 使用某种其他约定,我不确定它应该在这里。我意识到我可以像 Laracast 中所示那样使用它,但我想继续使用 Spark 中使用的相同编码风格进行构建。
如果你们中的任何专家对可能发生或遗漏的事情有任何线索,或者就此有任何其他切实的建议,我将非常感激!
这个问题的解决方案原来是导出 Spark JS 文件并查看它是如何在其中定义的。表单在组件中定义并包含在 bootstrap 文件中,我完全错过了。
我现在正在开发我的第一个基于 Spark 基础的应用程序,但遇到了瓶颈。我应该提一下,我已经两次浏览了整个 Vue Laracast——但是 Vue 在 Spark 中的使用方式不同,这让我感到困惑。希望有人能为我澄清一下。
所以,到目前为止我添加的第一个自定义 view 是:
@extends('spark::layouts.app')
@section('content')
<master-servers>
<div class="container">
<!-- Add Server -->
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">Add Server</div>
<div class="panel-body">
<form class="form-horizontal" role="form" method="POST" v-on:submit.prevent='methodAddServer'>
{{ csrf_field() }}
@if(count($errors) > 0)
<div class="alert alert-danger">
@foreach($errors->all() as $error)
<p>{{ $error }}</p>
@endforeach
</div>
@endif
@if(session('fail'))
<div class="alert alert-danger">
<p>{{ session('fail') }}</p>
</div>
@endif
@if(session('success'))
<div class="alert alert-success">
<p>{{ session('success') }}</p>
</div>
@endif
<!-- Server Label -->
<div class="form-group">
<label class="col-md-4 control-label">Server Label</label>
<div class="col-md-6">
<input type="text" class="form-control" name="name" v-model='addServer.name' value="{{ old('name') }}" autofocus>
</div>
</div>
<!-- IP -->
<div class="form-group">
<label class="col-md-4 control-label">IP Address</label>
<div class="col-md-6">
<input type="text" class="form-control" name="ip" v-model='addServer.ip' value="{{ old('ip') }}">
</div>
</div>
<!-- Add Button -->
<div class="form-group">
<div class="col-md-8 col-md-offset-4">
<button type="submit" class="btn btn-primary" :disabled="addServerFormBusy">
<i class="fa m-r-xs fa-sign-in"></i>Add server
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</master-servers>
@endsection
在 resources\assets\js\components 中,我有一个名为 servers.js 的文件,其中包含:
var base = require('../master/servers/servers');
Vue.component('master-servers', {
mixins: [base]
})
最后,resources\assets\js\master\servers\servers.js 包含:
module.exports = {
data: function() {
return {
addServer: [
{ name: '' },
{ ip: '' }
]
}
},
methods: {
methodAddServer: function(e) {
console.log(addServer);
this.addServerFormBusy = true;
this.$http.post('server', this.addServer);
}
}
};
手头的问题:浏览此页面并查看控制台时,我得到以下信息:
Error when evaluating expression "addServer.name": TypError: Cannot read property "name" of undefined
You are setting a non-existant path "addServer.name" on a vm instance. Consider pre-initializing the poprety with the "data" option for more reliable reactivity and better performance.
v-on:submit="methodAddServer" expects a function value, got undefined
我试过的:
我也尝试过在不使用 mixin 的情况下将所有代码添加到组件中(作为测试)——但这导致了同样的问题。
我花了一些时间研究视图(如 Vue)现在是如何在 Spark 中构建的,但最终在结构中迷失了很多。
根据我在观看 Vue laracast 时所了解的一切,这应该可行 - 但由于 Spark 使用某种其他约定,我不确定它应该在这里。我意识到我可以像 Laracast 中所示那样使用它,但我想继续使用 Spark 中使用的相同编码风格进行构建。
如果你们中的任何专家对可能发生或遗漏的事情有任何线索,或者就此有任何其他切实的建议,我将非常感激!
这个问题的解决方案原来是导出 Spark JS 文件并查看它是如何在其中定义的。表单在组件中定义并包含在 bootstrap 文件中,我完全错过了。